से आते हैं जब मुझे अपने पूर्ण नाम से केवल एक प्रकार बनाना होगा: "System.String" या "Tuple'2 [string, Mytype]"। स्ट्रिंग में असेंबली के बारे में कोई जानकारी नहीं है। यहां कोड कैसा दिखता है।जेनेरिक तर्क कई असेंबली
private static Type LoadType(string typeName)
{
// try loading the type
Type type = Type.GetType(typeName, false);
if (type != null)
return type;
// if the loading was not successfull iterate all the referenced assemblies and try to load the type.
Assembly asm = Assembly.GetEntryAssembly();
AssemblyName[] referencedAssemblies = asm.GetReferencedAssemblies();
foreach (AssemblyName referencedAssemblyName in referencedAssemblies)
{
type = referencedAssembly.GetType(typeName, false);
if (type != null)
return type;
}
throw new TypeLoadException(string.Format("Could not load the Type '{0}'",typeName));
}
यह विधि काम करता है जब प्रकार सामान्य नहीं होता है। लेकिन असेंबली के माध्यम से पुनरावृत्त सामान्य प्रकारों के लिए हमेशा विफल रहता है क्योंकि किसी भी असेंबली में प्रकार बनाने के लिए आवश्यक सभी परिभाषाएं होती हैं।
क्या GetTypes को कॉल करते समय प्रकार संकल्प के लिए गुणक असेंबली प्रदान करने का कोई तरीका है?
यदि आप प्रोग्राम typenames खींच रहे हैं और सामान्य प्रकार का नाम munging उदाहरण के लिए एक सूची के लिए, बनाया जाना, AssemblyQualifiedName का उपयोग सुनिश्चित करें। –
आप इस मामले के बारे में क्या करने जा रहे हैं जहां दो अलग-अलग संदर्भों में दो प्रकार हैं जिनके पास बिल्कुल वही नाम है? –
सभी प्रकार उनके नामस्थान के साथ उपसर्ग किए गए हैं, इसलिए उम्मीद है कि यह अक्सर नहीं होगा, बाद में deserialization विफल हो जाएगा। मैं बैकट्रैक कर सकता हूं और किसी अन्य प्रकार की असेंबली में कोशिश कर सकता हूं और deserialization को पुनः प्रयास कर सकता हूं। लेकिन मुझे पता है कि यह करने से आसान कहा जाता है। –