¿Cuál es el equivalente de C # a isInstance () de Java?


Respuestas:


52

El equivalente de Java obj.getClass().isInstance(otherObj)en C # es el siguiente:

bool result = obj.GetType().IsAssignableFrom(otherObj.GetType());

Tenga en cuenta que mientras tanto Java como C # funcionan en el objeto de tipo de tiempo de ejecución (Java java.lang.Class≣ C # System.Type) de un obj(via .getClass()vs .getType()), Java isInstancetoma un objeto como argumento, mientras que C # IsAssignableFromespera otro System.Typeobjeto.


1
Tenga en cuenta que IsAssignableFrom toma un tipo, no un objeto, por lo que debe hacer OtherObj.getType ().
FlySwat

3
Gracias Jon, y recuerda, ¡esto es un wiki! No me molesta que la gente corrija mis errores.
Konrad Rudolph

1
interesante ... en Java, la JVM trata a "instanceof" especialmente, aparentemente es muy, muy rápido, lo que puede explicar por qué es inusualmente una palabra clave (también hay un método isAssignable en Java).
Michael Neale

¿Por qué este método es mejor que el operador "es", que es más legible?
Timothy Gonzalez

@TimothyGonzalez Porque hace algo diferente. Prueba si dos variables tienen el mismo tipo. isrequirió un nombre de tipo, por el contrario. Esto es lo que OP quería: el equivalente de Java isInstance. La otra respuesta es simplemente incorrecta a pesar del ridículo número de votos a favor.
Konrad Rudolph


39

Depende, utilícelo issi no desea usar el resultado del yeso y úselo assi lo desea. Casi nunca quieres escribir:

if(foo is Bar) {
    return (Bar)foo;
}

En vez de:

var bar = foo as Bar;
if(bar != null) {
    return bar;
}

2

justo fuera de mi cabeza, también podrías hacer:

bool result = ((obj as MyClass) != null)

No estoy seguro de cuál funcionaría mejor. Lo dejaré en manos de otra persona para comparar :)


2

El siguiente código puede ser una alternativa a IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject)

Consulte la descripción de Type.IsInstanceOfType en MSDN.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.