我知道is
as
和instanceof
{{1}},但反射isInstance()方法呢?
答案 0 :(得分:180)
bool result = (obj is MyClass); // Better than using 'as'
答案 1 :(得分:51)
C#中Java的obj.getClass().isInstance(otherObj)
等价如下:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
请注意,虽然Java和C#都在java.lang.Class
的运行时类型对象(Java System.Type
≣C#obj
)上工作(通过.getClass()
vs {{1} }),Java的.getType()
将一个对象作为其参数,而C#的isInstance
期望另一个IsAssignableFrom
对象。
答案 2 :(得分:39)
取决于,如果您不想使用演员表的结果,请使用is
,如果您愿意,请使用as
。你几乎不想写:
if(foo is Bar) {
return (Bar)foo;
}
而不是:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
答案 3 :(得分:2)
就在我的头顶,你也可以这样做:
bool result = ((obj as MyClass) != null)
不确定哪个会表现得更好。我会把它留给其他人做基准测试:)
答案 4 :(得分:2)
以下代码可以替代IsAssignableFrom
。
parentObject.GetType().IsInstanceOfType(inheritedObject)
请参阅MSDN中的Type.IsInstanceOfType说明。