जावा के आई इनस्टेंस () के बराबर C # क्या है?


जवाबों:


52

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

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

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


1
नोट IsAssignableFrom एक प्रकार लेता है, एक वस्तु नहीं, इसलिए आपको वास्तव में OtherObj.getType () करना होगा।
फ्लाईसवाट

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

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

यह विधि बेहतर क्यों है फिर "ऑपरेटर" अधिक पठनीय है?
टिमोथी गोंजालेज

@TimothyGonzalez क्योंकि यह कुछ अलग करता है। यह परीक्षण करता है कि क्या दो चर एक ही प्रकार के हैं। isइसके विपरीत, एक प्रकार का नाम आवश्यक है। यह वही है जो ओपी चाहता था: जावा के बराबर isInstance। अपवित्रों की हास्यास्पद संख्या के बावजूद अन्य उत्तर गलत है।
कोनराड रुडोल्फ

181
bool result = (obj is MyClass); // Better than using 'as'

1
क्या यह उन वर्गों के लिए भी काम करता है जो विरासत का उपयोग करते हैं? ( new Child() is Parent)
टॉम ज़ातो -

1
यहां परीक्षण किया गया है, यह उन कक्षाओं के लिए काम करता है जो उपयोगकर्ता उत्तराधिकार में हैं। धन्यवाद दोस्त।
गुइलहर्मे गोल्फेटो

39

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

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

के बजाय:

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

2

मेरे सिर के ऊपर से बस, आप भी कर सकते हैं:

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

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


2

नीचे दिया गया कोड वैकल्पिक हो सकता है IsAssignableFrom

parentObject.GetType().IsInstanceOfType(inheritedObject)

MSDN में Type.IsInstanceOfType विवरण देखें ।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.