2010-08-18 9 views
54

मेरे पास एक तरीका है जहां मुझे कक्षा के प्रकार को हल करने की आवश्यकता है। इस वर्ग के नाम स्थान के लिए इसी तरह के साथ एक और विधानसभा में मौजूद है:एक अलग विधानसभा में कक्षा के नाम से हल करें

MyProject.Domain.Model 

मैं प्रयास कर रहा हूँ निम्नलिखित प्रदर्शन करने के लिए:

Type.GetType("MyProject.Domain.Model." + myClassName); 

यह अच्छा काम करता है, तो कोड कि इस कार्रवाई प्रदर्शन कर रहा है एक ही विधानसभा में है जिस वर्ग के प्रकार मैं हल करने की कोशिश कर रहा हूं, हालांकि, यदि मेरी कक्षा एक अलग असेंबली में है, तो यह कोड विफल हो जाता है।

मुझे यकीन है कि वहां कहीं ज्यादा बेहतर तरीका यह कार्य को पूरा करने के लिए है, लेकिन मैं विधानसभाओं को हल करने और वर्ग मैं देख रहा हूँ के प्रकार को हल करने के भीतर नामस्थान traversing के साथ बहुत अनुभव नहीं किया है। इस कार्य को और अधिक सुन्दर तरीके से पूरा करने के लिए कोई सलाह या टिप्स?

+0

के संभावित डुप्लिकेट [Type.GetType ("namespace.abClassName") रिटर्न अशक्त] (http://stackoverflow.com/questions/1825147/type-gettypenamespace-ab-classname-returns-null) –

उत्तर

111

आप इस तरह विधानसभा नाम जोड़ना होगा:

Type.GetType("MyProject.Domain.Model." + myClassName + ", AssemblyName"); 

अस्पष्टता से बचने के लिए या यदि विधानसभा GAC में स्थित है, आप इस तरह की तरह एक पूरी तरह से योग्य विधानसभा नाम प्रदान करना चाहिए:

Type.GetType("System.String, mscorlib, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"); 
+0

बहुत अच्छा, मैं पता था कि मैं असेंबली समेत कुछ मामूली याद कर रहा था। यह समाधान मेरी जरूरतों के लिए काम किया। धन्यवाद। – Brandon

+8

और क्रमबद्ध करने में काम करने वालों के लिए: असेंबली-योग्य नाम प्राप्त करने के लिए, संपत्ति [Type.AssemblyQualifiedName] (http://msdn.microsoft.com/en-us/library/system.type.assemblyqualifiedname.aspx) है –

+0

यदि प्रकार एक सूची है, जहां टी एक कस्टम क्लास है, तो आप 2 असेंबली कैसे निर्दिष्ट करते हैं? I.e। Mscorlib असेंबली System.Collections.Generic.List, और पुस्तकालय जिसमें टी है? –

1

क्या आप मानक तरीकों का उपयोग कर सकते हैं?

typeof(MyClass); 

MyClass c = new MyClass(); 
c.GetType(); 

यदि नहीं, तो विधानसभा के बारे में Type.GetType में जानकारी जोड़ने करना होगा।

1

लघु और गतिशील दृष्टिकोण AssemblyQualifiedName संपत्ति का उपयोग कर -

Type.GetType(Type.GetType("MyProject.Domain.Model." + myClassName).AssemblyQualifiedName) 
1

पहले लोड विधानसभा और उसके बाद प्रकार। पूर्व: असेंबली डीएलएल = असेंबली। लोडफाइल (पथ); DLL.GetType (typeName);

संबंधित मुद्दे