Nota que this.GetType()
! = typeof(X)
devuelve FALSE si este se deriva de (o implementos en caso de un tipo de interfaz), pero no idénticos a X, mientras que this is X
vuelve verdadera.
¿Y por qué habría una palabra clave separada cuando puede simplemente usar !(a is X)
? Eso está hinchando el idioma con poca ganancia. Como a Eric Lippert le gusta hacer hincapié en que cada nueva característica del lenguaje necesita ofrecer suficientes ventajas para compensar la codificación, la documentación, las pruebas y, por supuesto, la mayor complejidad del lenguaje. Y un operador not is
simplemente no ofrece suficiente.
podría implementar un método de extensión, pero creo que eso es estúpido:
public static bool IsNot<T>(this object obj)
{
return !(obj is T);
}
Esos no serían funcionalmente equivalentes si 'X' fuera un subtipo de' this.GetType() '. –