I know of is
and as
for instanceof
, but what about the reflective isInstance() method?
The equivalent of Java’s obj.getClass().isInstance(otherObj)
in C# is as follows:
bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());
Note that while both Java and C# work on the runtime type object (Java java.lang.Class
≣ C# System.Type
) of an obj
(via .getClass()
vs .getType()
), Java’s isInstance
takes an object as its argument, whereas C#’s IsAssignableFrom
expects another System.Type
object.
bool result = (obj is MyClass); // Better than using 'as'
Depends, use is
if you don't want to use the result of the cast and use as
if you do. You hardly ever want to write:
if(foo is Bar) {
return (Bar)foo;
}
Instead of:
var bar = foo as Bar;
if(bar != null) {
return bar;
}
just off the top of my head, you could also do:
bool result = ((obj as MyClass) != null)
Not sure which would perform better. I'll leave it up to someone else to benchmark :)
Below code can be alternative to IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
See Type.IsInstanceOfType description in MSDN.
来源:https://stackoverflow.com/questions/282459/what-is-the-c-sharp-equivalent-to-javas-isinstance