2008-11-11 23 views

उत्तर

47

सी # में जावा के obj.getClass().isInstance(otherObj) के बराबर इस प्रकार है:

bool result = obj.GetType().IsAssignableFrom(otherObj.GetType()); 

ध्यान दें कि जबकि दोनों जावा और सी क्रम प्रकार वस्तु एक obj (की (जावा java.lang.Class ≣ सी # System.Type) पर # काम .getClass() बनाम .getType() के माध्यम से), जावा का isInstance ऑब्जेक्ट को इसके तर्क के रूप में लेता है, जबकि सी #अन्य System.Type ऑब्जेक्ट की अपेक्षा करता है।

+1

नोट IsAssignable एक ऑब्जेक्ट नहीं, एक वस्तु लेता है, इसलिए आपको वास्तव में अन्यObj.getType() करने की आवश्यकता है। – FlySwat

+3

धन्यवाद जॉन - और याद रखें, यह एक विकी है! मैं अपनी गलतियों को सुधारने वाले लोगों को नाराज नहीं करता हूं। –

+1

रोचक ... जावा में, जेवीएम विशेष रूप से बहुत ही तेज़ "उदाहरण" का व्यवहार करता है, जो समझा सकता है कि इसका असामान्य रूप से एक कीवर्ड क्यों है (जावा में भी एक असाइन करने योग्य विधि है)। –

2

सिर्फ मेरे सिर के ऊपर से, आप भी कर सकता है:

bool result = ((obj as MyClass) != null) 

सुनिश्चित नहीं हैं कि बेहतर प्रदर्शन करेंगे। मैं बेंचमार्क के किसी और अप करने के लिए इसे छोड़ देंगे :)

172
bool result = (obj is MyClass); // Better than using 'as' 
+0

क्या यह कक्षाओं के लिए भी काम करता है जो विरासत का उपयोग करते हैं? ('नया बच्चा() अभिभावक है) –

+2

हां यह ठीक है, आप यहां परीक्षण किए गए –

+0

से ऊपर कैसे दिखाते हैं, यह उपयोगकर्ता विरासत के वर्गों के लिए काम करता है। धन्यवाद दोस्त। –

36

निर्भर करता है, is का उपयोग आप कलाकारों के परिणाम का उपयोग करें और as उपयोग करें यदि आप नहीं करना चाहते हैं।

if(foo is Bar) { 
    return (Bar)foo; 
} 

बजाय:: आप शायद ही कभी लिखना चाहते

var bar = foo as Bar; 
if(bar != null) { 
    return bar; 
} 
3

कोड नीचे IsAssignableFrom लिए विकल्प हो सकता है।

parentObject.GetType().IsInstanceOfType(inheritedObject) 

एमएसडीएन में Type.IsInstanceOfType विवरण देखें।

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