2008-11-11 20 views

Respuesta

47

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

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

Nota que mientras tanto Java y C# trabajo sobre el objeto de tipo de tiempo de ejecución (Java java.lang.Class ≣ C# System.Type) de un obj (a través de .getClass() vs .getType()), Java isInstance toma un objeto como argumento, mientras que C# 's IsAssignableFrom espera otro objeto System.Type.

+1

Nota IsAssignableFrom toma un Tipo, no un objeto, por lo que necesita hacer OtherObj.getType(). – FlySwat

+3

Gracias Jon, y recuerda, ¡esta es una wiki! No me molesta que la gente corrija mis errores. –

+1

interesante ... en Java, la JVM trata especialmente "instanceof", al parecer 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). –

2

justo al lado de la parte superior de la cabeza, también se puede hacer:

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

No estoy seguro de que sería un mejor desempeño. Lo dejo hasta que otra persona de referencia :)

172
bool result = (obj is MyClass); // Better than using 'as' 
+0

¿Funciona incluso para las clases que usan herencia? ('new Child() is Parent') –

+2

sí lo hace, exactamente cómo se muestra arriba –

+0

probado aquí, funciona para las clases que el usuario hereda. Gracias hombre. –

36

Depende, utilice is si no desea utilizar el resultado del reparto y utilizar as si lo hace. Casi nunca desea escribir:

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

En lugar de:

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

A continuación código puede ser alternativa a IsAssignableFrom.

parentObject.GetType().IsInstanceOfType(inheritedObject) 

Ver Type.IsInstanceOfType descripción en MSDN.

Cuestiones relacionadas