¿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.