我知道使用 is
和 as
来进行 instanceof
判断,但是反射中的 isInstance() 方法如何使用呢?
bool result = (obj is MyClass); // Better than using 'as'
在C#中,与Java中obj.getClass().isInstance(otherObj)
等同的代码如下:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
请注意,尽管 Java 和 C# 都使用对象的运行时类型对象(Java 的 java.lang.Class
≣ C# 的 System.Type
)来处理一个 obj
(通过 .getClass()
与 .getType()
),但是 Java 的 isInstance
接受一个对象作为其参数,而 C# 的 IsAssignableFrom
则期望另一个 System.Type
对象。is
需要一个类型名称。这就是OP想要的:Java的isInstance
等效物。尽管另一个答案获得了荒谬的赞数,但它是错误的。 - Konrad Rudolph这取决于情况,如果您不想使用转换的结果,则使用is
,如果您想使用,则使用as
。您几乎永远不会想要编写:
if(foo is Bar) {
return (Bar)foo;
}
用这个代替:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
parentObject.GetType().IsInstanceOfType(inheritedObject)
请参阅MSDN中Type.IsInstanceOfType的说明。
bool result = ((obj as MyClass) != null)
我不确定哪个表现更好。我会让别人来进行基准测试 :)
new Child() is Parent
) - Tomáš Zato