User u = new User();
Type t = typeof(User);
u is User -> returns true
u is t -> compilation error
यदि कोई चर इस प्रकार से है, तो मैं कैसे परीक्षण करूं?
जवाबों:
अन्य उत्तरों में सभी महत्वपूर्ण चूक हैं।
is
ऑपरेटर करता नहीं की जाँच करता है, तो संकार्य के क्रम प्रकार है वास्तव में दिए गए प्रकार; इसके बजाय, यह देखने के लिए जांचता है कि रनटाइम प्रकार दिए गए प्रकार के साथ संगत है या नहीं :
class Animal {}
class Tiger : Animal {}
...
object x = new Tiger();
bool b1 = x is Tiger; // true
bool b2 = x is Animal; // true also! Every tiger is an animal.
लेकिन प्रकार के लिए जाँच पहचान के लिए प्रतिबिंब के चेक के साथ पहचान , के लिए नहीं अनुकूलता
bool b5 = x.GetType() == typeof(Tiger); // true
bool b6 = x.GetType() == typeof(Animal); // false! even though x is an animal
or with the type variable
bool b7 = t == typeof(Tiger); // true
bool b8 = t == typeof(Animal); // false! even though x is an
अगर वह नहीं है जो आप चाहते हैं, तो आप शायद IsAssignableFrom चाहते हैं:
bool b9 = typeof(Tiger).IsAssignableFrom(x.GetType()); // true
bool b10 = typeof(Animal).IsAssignableFrom(x.GetType()); // true! A variable of type Animal may be assigned a Tiger.
or with the type variable
bool b11 = t.IsAssignableFrom(x.GetType()); // true
bool b12 = t.IsAssignableFrom(x.GetType()); // true! A
t
लिए , विकल्प typeof(Animal)
। तो मार्क का बेहतर रूप बन जाता है t.IsInstanceOfType(x)
।
GetType()
हर एक फ्रेमवर्क प्रकार पर मौजूद है, क्योंकि यह आधार object
प्रकार पर परिभाषित किया गया है । इसलिए, स्वयं प्रकार की परवाह किए बिना, आप इसका उपयोग अंतर्निहित वापस करने के लिए कर सकते हैंType
तो, आपको बस इतना करना चाहिए:
u.GetType() == t
आपको यह देखने की ज़रूरत है कि क्या आपकी आवृत्ति का प्रकार वर्ग के प्रकार के बराबर है। आप जिस GetType()
विधि का उपयोग करते हैं उसका प्रकार प्राप्त करने के लिए :
u.GetType().Equals(t);
या
u.GetType.Equals(typeof(User));
करना चाहिए। यदि आप चाहें तो अपनी तुलना करने के लिए स्पष्ट रूप से आप '==' का उपयोग कर सकते हैं।
u.GetType.Equals(typeof(User));
t
जिसमें टाइप शामिल है।
यह जांचने के लिए कि क्या कोई वस्तु लेखन के बजाय किसी दिए गए प्रकार चर के साथ संगत है
u is t
आपको लिखना चाहिए
typeof(t).IsInstanceOfType(u)
typeof(Animal).IsInstanceOfType(x)
तुलना में छोटा और अधिक सीधा हैtypeof(Animal).IsAssignableFrom(x.GetType());
(और यदि आप बाद वाले का उपयोग करते हैं तो Resharper पूर्व का उपयोग करने का सुझाव देगा)।