什么是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)
不知道哪个会更好。 我会留给别人来基准:)