What is the C# equivalent to Java's isInstance()?

前端 未结 5 908
清歌不尽
清歌不尽 2020-12-13 16:54

I know of is and as for instanceof, but what about the reflective isInstance() method?

相关标签:
5条回答
  • 2020-12-13 17:12
    bool result = (obj is MyClass); // Better than using 'as'
    
    0 讨论(0)
  • 2020-12-13 17:12

    Below code can be alternative to IsAssignableFrom.

    parentObject.GetType().IsInstanceOfType(inheritedObject)
    

    See Type.IsInstanceOfType description in MSDN.

    0 讨论(0)
  • 2020-12-13 17:16

    The equivalent of Java’s obj.getClass().isInstance(otherObj) in C# is as follows:

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

    Note that while both Java and C# work on the runtime type object (Java java.lang.Class ≣ C# System.Type) of an obj (via .getClass() vs .getType()), Java’s isInstance takes an object as its argument, whereas C#’s IsAssignableFrom expects another System.Type object.

    0 讨论(0)
  • 2020-12-13 17:18

    Depends, use is if you don't want to use the result of the cast and use as if you do. You hardly ever want to write:

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

    Instead of:

    var bar = foo as Bar;
    if(bar != null) {
        return bar;
    }
    
    0 讨论(0)
  • 2020-12-13 17:37

    just off the top of my head, you could also do:

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

    Not sure which would perform better. I'll leave it up to someone else to benchmark :)

    0 讨论(0)
提交回复
热议问题