2009-04-16 21 views
13

है, तो मैं यह जांचने के लिए एक सत्यापन लिखने की कोशिश कर रहा हूं कि ऑब्जेक्ट आवृत्ति को चर प्रकार पर डाला जा सकता है। मेरे पास ऑब्जेक्ट के प्रकार के लिए एक प्रकार का उदाहरण है जिसे उन्हें प्रदान करने की आवश्यकता है। लेकिन प्रकार भिन्न हो सकता है। यह मूल रूप से मैं क्या करना चाहता हूं।यह कैसे बताना है कि कोई उदाहरण किसी निश्चित प्रकार या किसी व्युत्पन्न प्रकार

 Object obj = new object(); 
     Type typ = typeof(string); //just a sample, really typ is a variable 

     if(obj is typ) //this is wrong "is" does not work like this 
     { 
      //do something 
     } 

प्रकार ऑब्जेक्ट में IsSubClassOf, और IsInstanceOfType विधियां हैं। लेकिन मैं वास्तव में जांचना चाहता हूं कि obj या तो टाइप या टाइप से प्राप्त किसी भी वर्ग का उदाहरण है।

एक साधारण प्रश्न की तरह लगता है, लेकिन मुझे लगता है कि यह समझ में नहीं आता है।

उत्तर

24

कैसे इस बारे में:

 

    MyObject myObject = new MyObject(); 
    Type type = myObject.GetType(); 

    if(typeof(YourBaseObject).IsAssignableFrom(type)) 
    { 
     //Do your casting. 
     YourBaseObject baseobject = (YourBaseObject)myObject; 
    } 

 

यह आपको बताता है कि अगर उद्देश्य यह है कि निश्चित प्रकार के लिए casted जा सकता है।

+1

हाँ मैंने पाया कि बाद में कल रात। हालांकि धन्यवाद। –

7

मुझे लगता है कि आपको अपनी शर्तों को पुन: स्थापित करने की आवश्यकता है, क्योंकि objDerived का एक उदाहरण है, यह Base का एक उदाहरण भी होगा। और typ.IsIstanceOfType(obj) सच हो जाएगा।

class Base { } 
class Derived : Base { } 

object obj = new Derived(); 
Type typ = typeof(Base); 

type.IsInstanceOfType(obj); // = true 
type.IsAssignableFrom(obj.GetType()); // = true 
7

आप उदाहरण के साथ काम कर रहे हैं, तो आप के लिए जा रहा किया जाना चाहिए Type.IsInstanceOfType

(रिटर्न) सच है, तो वर्तमान प्रकार ओ का प्रतिनिधित्व करती वस्तु की वंशानुगत पदानुक्रम में है, या यदि वर्तमान प्रकार एक इंटरफ़ेस है जो समर्थन करता है। झूठी अगर इन भी शर्त पूरी न मामला है, या ओ है अगर nullNothingnullptra अशक्त संदर्भ (विजुअल बेसिक में कुछ नहीं), या वर्तमान प्रकार एक खुला सामान्य प्रकार (जो है, ContainsGenericParameters सच रिटर्न) है यदि। - MSDN

 Base b = new Base(); 
     Derived d = new Derived(); 
     if (typeof(Base).IsInstanceOfType(b)) 
      Console.WriteLine("b can come in."); // will be printed 
     if (typeof(Base).IsInstanceOfType(d)) 
      Console.WriteLine("d can come in."); // will be printed 

आप प्रकार की वस्तुओं के साथ काम कर रहे हैं, तो आप Type.IsAssignableFrom

(रिटर्न) पर सच देखना चाहिए अगर ग और वर्तमान प्रकार एक ही प्रकार के प्रतिनिधित्व करते हैं या वर्तमान प्रकार विरासत सी के पदानुक्रम में है, या यदि वर्तमान प्रकार एक इंटरफेस है जो सी लागू करता है, या यदि सी सामान्य जेनेरिक प्रकार पैरामीटर और वर्तमान प्रकार टी में से एक का प्रतिनिधित्व करता है वह सी की बाधाओं। झूठी अगर में से कोई भी यह शर्तें सत्य नहीं हैं, या यदि सी nullNothingnullptra शून्य संदर्भ (विजुअल बेसिक में कुछ भी नहीं) है। - एमएसडीएन

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