यह निर्भर करता है जिस पर विधानसभा वर्ग है।यदि यह mscorlib
में है या बुला विधानसभा आप सभी की जरूरत
Type type = Type.GetType("namespace.class");
है लेकिन अगर यह कुछ अन्य विधानसभा से संदर्भित है, तुम क्या करने की आवश्यकता होगी: यदि आप केवल वर्ग के नाम है, तो
Assembly assembly = typeof(SomeKnownTypeInAssembly).Assembly;
Type type = assembly.GetType("namespace.class");
//or
Type type = Type.GetType("namespace.class, assembly");
"MyClass", तो आपको नामस्थान नाम (या दोनों नामस्थान नाम और असेंबली नाम दोनों संदर्भित असेंबली के मामले में) प्राप्त करना होगा और कक्षा के नाम के साथ मिलकर मिलना होगा। कुछ की तरह:
//if class is in same assembly
var namespace = typeof(SomeKnownTypeInNamespace).Namespace;
Type type = Type.GetType(namespace + "." + "MyClass");
//or for cases of referenced classes
var assembly = typeof(SomeKnownTypeInAssembly).Assembly;
var namespace = typeof(SomeKnownTypeInNamespace).Namespace;
Type type = assembly.GetType(namespace + "." + "MyClass");
//or
Type type = Type.GetType(namespace + "." + "MyClass" + ", " + assembly.GetName().Name);
आप पूरी तरह कुछ भी नहीं लेकिन सिर्फ वर्ग के नाम, तो आप एक से मिलता जुलता स्ट्रिंग चयन करने के लिए पूरे विधानसभाओं क्वेरी कर सकता है (यहां तक कि विधानसभा का नाम या नाम स्थान नाम की कोई preawareness) है। लेकिन वह बहुत धीमी होना चाहिए:
Type type = AppDomain.CurrentDomain.GetAssemblies()
.SelectMany(x => x.GetTypes())
.FirstOrDefault(x => x.Name == "MyClass");
ध्यान दें कि यह पहला मिलान वर्ग देता है, तो बहुत ही सटीक होने की ज़रूरत नहीं है, तो आप भर में विधानसभाओं/नामस्थान ही नाम के साथ कई वर्गों के लिए होगा। किसी भी मामले में मूल्यों को कैश करना यहां समझ में आता है। थोड़ा तेज़ तरीका ग्रहण करने के लिए वहाँ एक डिफ़ॉल्ट नाम स्थान है:
Type type = AppDomain.CurrentDomain.GetAssemblies()
.Select(a => new { a, a.GetTypes().First().Namespace })
.Select(x => x.a.GetType(x.Namespace + "." + "MyClass"))
.FirstOrDefault(x => x != null);
लेकिन वह फिर से एक धारणा है कि अपने प्रकार विधानसभा में कुछ अन्य यादृच्छिक वर्ग के रूप में एक ही नाम स्थान होगा है; बहुत भंगुर, बहुत अच्छा नहीं।
आप निम्नलिखित this link. फिर आप उसी क्वेरी किए जाने के रूप में प्रत्येक डोमेन के लिए ऊपर दिखाए गए कर सकते हैं अन्य डोमेन की कक्षाओं आप सभी आवेदन डोमेन की एक सूची प्राप्त कर सकते हैं, चाहते हैं। यदि आपका असेंबली जहां टाइप रहता है अभी तक लोड नहीं किया गया है, तो आपको Assembly.Load
, Assembly.LoadFrom
आदि
संभावित डुप्लिकेट [टाइप.गेट टाइप() में नामस्थान नाम देने से बचें (http: // stackoverflow .com/प्रश्न/9273629/टालने-देने-नामस्थान-नाम-इन-टाइप-गेटटाइप) – Fr33dan
@ Fr33dan, परिपत्र लूप? उल्लेख किया गया संभावित [मूल] (http://stackoverflow.com/questions/9273629/avoid-giving-namespace-name-in-type-gettype) उल्लेख करता है [यह प्रश्न] (http://stackoverflow.com/questions/179102/हो रही-ए-सिस्टम-प्रकार-से-प्रकार-आंशिक-नाम) यथासंभव मूल (देखें [टिप्पणी] (http://stackoverflow.com/questions/9273629/avoid-giving-namespace-name-in-type- GetType # comment39575691_9273629))? :) – publicgk
@publicgk मैं वास्तव में उस प्रश्न के साथ विलय के लिए इसे ध्वजांकित करने की कोशिश कर रहा था क्योंकि वे वही हैं लेकिन उस प्रश्न और दोनों के पास अच्छे उत्तर हैं। [यह मेटा प्रश्न] देखें (http://meta.stackoverflow.com/q/269080/1111886)। मैंने इसे गलत तरीके से गलत कर दिया और छोड़ दिया, तो कोई बाद में आया और फैसला किया कि यह डुप्लिकेट था क्योंकि दूसरा पुराना सवाल था। – Fr33dan