Lo sé is
y as
para instanceof
, pero ¿qué pasa con el método reflexivo isInstance () ?
Lo sé is
y as
para instanceof
, pero ¿qué pasa con el método reflexivo isInstance () ?
Respuestas:
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 isInstance
toma un objeto como argumento, mientras que C # IsAssignableFrom
espera otro System.Type
objeto.
is
requirió 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.
bool result = (obj is MyClass); // Better than using 'as'
new Child() is Parent
)
Depende, utilícelo is
si no desea usar el resultado del yeso y úselo as
si 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;
}
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 :)
El siguiente código puede ser una alternativa a IsAssignableFrom
.
parentObject.GetType().IsInstanceOfType(inheritedObject)
Consulte la descripción de Type.IsInstanceOfType en MSDN.