2011-09-09 11 views
22

मैं एक गतिशील वस्तु के लिए प्रकार प्राप्त करना चाहते हैं, कुछ की तरह:प्राप्त एक वस्तु के लिए प्रकार घोषित गतिशील

dynamic tmp = Activator.CreateInstance(assembly, nmspace + "." + typeName); 
Type unknown = tmp.GetType(); 

कि इसके बाद के संस्करण को छोड़कर, GetType() गतिशील के लिए आवरण के प्रकार रिटर्न वस्तुएं लपेटी वस्तु के प्रकार नहीं हैं। धन्यवाद!

+0

ऐसा लगता है जैसे हम और अधिक विस्तार की जरूरत है। मुझे आपके पास कुछ भी गलत नहीं दिख रहा है। –

+1

यदि मैं अज्ञात प्रकार के लिए नाम मुद्रित करता हूं तो मुझे मिलता है: "ऑब्जेक्टहैंडल" अंतर्निहित गतिशील ऑब्जेक्ट का प्रकार नहीं है। – user379429

उत्तर

23

आप ऐसा करने की जरूरत ...

Type unknown = ((ObjectHandle)tmp).Unwrap().GetType(); 

वैसे, इस एक छोटे से भ्रामक है क्योंकि अगर आप अपने वर्तमान विधानसभा में एक प्रकार पर Activator.CreateInstance फोन ...

Activator.CreateInstance(typeof(Foo)) 

... ऑब्जेक्ट लपेटा नहीं गया है और मूल कोड ठीक काम करता है।

+0

बीटीडब्ल्यू, यह असेंबली को मौजूदा एपडोमेन में लोड होने से रोकने के लिए करता है। जब आप खोलते हैं, तो इसे लोड किया जाएगा। – x0n

4

आप Activator.CreateInstance का उपयोग कर सकते हैं, तो आप सीधे का उपयोग कर सकते हैं:

object tmp = Activator.CreateInstance(assembly, nmspace + "." + typeName); 
Type unknown = tmp.GetType(); 
+1

वस्तुओं को गतिशीलता के बाद थोड़ा अलग नहीं हैं? एक्सेल डीएनए के माध्यम से एक्सेल के साथ COM इंटरऑप का उपयोग करते समय – amalgamate

-2

यह बहुत सरल है, तो आप बॉक्स से बाहर लगता है। :-)

Type theType = dynamicItem.GetType(); 

ये रहा ...

+0

, रेंज ऑब्जेक्ट का प्रकार __ComObject है, उपयोगी नहीं है। इस मामले में, इस आलेख को देखें: https://fernandof.wordpress.com/2008/02/05/how-to-check-the-type-of-a-com-object-system__comobject-with-visual-c- शुद्ध/getexceltypeforcomobject-विधि / –

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