我知道is
and as
for instanceof
,但是反射isInstance()方法呢?
diegogs
问问题
76889 次
5 回答
185
bool result = (obj is MyClass); // Better than using 'as'
于 2008-11-12T05:12:24.740 回答
53
C#中Java的等价物obj.getClass().isInstance(otherObj)
如下:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
请注意,虽然 Java 和 C# 都在(via vs ) 的运行时类型对象 (Java java.lang.Class
≣ C# System.Type
) 上工作,但 Java将对象作为其参数,而 C#需要另一个对象。obj
.getClass()
.getType()
isInstance
IsAssignableFrom
System.Type
于 2008-11-11T23:13:08.473 回答
39
取决于,is
如果您不想使用演员表的结果,请使用,as
如果您愿意,请使用。你几乎不想写:
if(foo is Bar) {
return (Bar)foo;
}
代替:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
于 2008-11-12T05:30:53.157 回答
2
就在我的脑海中,你也可以这样做:
bool result = ((obj as MyClass) != null)
不确定哪个会更好。我将把它留给其他人进行基准测试:)
于 2008-11-12T01:10:18.457 回答
2
下面的代码可以替代IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
请参阅MSDN 中的Type.IsInstanceOfType描述。
于 2015-12-28T12:52:57.437 回答