什么是C#相当于Java的isInstance()?

我知道is和为instanceof ,但reflectionisInstance()方法呢?

Java中的obj.getClass().isInstance(otherObj)在C#中的等价物如下所示:

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

请注意,虽然Java和C#都是通过.getClass().getType() )对obj的运行时types对象(Java java.lang.Class ?C# System.Type )进行操作,Java的isInstance .getType()对象为参数而C#的IsAssignableFrom需要另一个System.Type对象。

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

取决于,如果你不想使用演员的结果和使用as就像你一样使用。 你几乎不想写:

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

代替:

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

下面的代码可以替代IsAssignableFrom

 parentObject.GetType().IsInstanceOfType(inheritedObject) 

请参阅MSDN中的Type.IsInstanceOfType说明。

就在我头顶上,你也可以这样做:

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

不知道哪个会更好。 我会留给别人来基准:)