Probar un objeto para que NO sea un tipo
Pregunta
Sé cómo probar un objeto para ver si es de un tipo, usando la palabra clave IS, por ejemplo.
if (foo is bar)
{
//do something here
}
pero ¿cómo se prueba que no sea "barra"? Parece que no puedo encontrar una palabra clave que funcione con IS para probar un resultado negativo.
Por cierto, tengo la horrible sensación de que esto es tan obvio, así que me disculpo de antemano...
Solución
if (!(foo is bar)) {
}
Otros consejos
También puedes utilizar el como operador.
El operador AS se utiliza para realizar conversiones entre tipos compatibles.
bar aBar = foo as bar; // aBar is null if foo is not bar
No hay una palabra clave específica
if (!(foo is bar)) ...
if (foo.GetType() != bar.GetType()) .. // foo & bar should be on the same level of type hierarchy
Debe aclarar si desea probar que un objeto es exactamente cierto tipo o asignable de cierto tipo.Por ejemplo:
public class Foo : Bar {}
Y supongamos que tienes:
Foo foo = new Foo();
Si quieres saber si foo no es Bar(), entonces debes hacer esto:
if(!(foo.GetType() == tyepof(Bar))) {...}
Pero si quiere asegurarse de que foo no derive de Bar, entonces una comprobación sencilla es utilizar la palabra clave as.
Bar bar = foo as Bar;
if(bar == null) {/* foo is not a bar */}