Notez que this.GetType()
! = typeof(X)
renvoie false si cela est dérivé (ou instruments en cas d'un type d'interface), mais pas identique à X, alors que this is X
renvoie true.
Et pourquoi y aurait-il un mot-clé distinct lorsque vous pouvez simplement utiliser !(a is X)
? Cela gonfle la langue avec peu de gain. Comme Eric Lippert aime souligner que chaque nouvelle fonctionnalité linguistique doit offrir suffisamment d'avantages pour compenser le codage, la documentation, les tests et bien sûr la complexité accrue de la langue. Et un opérateur not is
n'offre tout simplement pas assez.
Vous pouvez mettre en œuvre une méthode d'extension, mais je pense que c'est stupide:
public static bool IsNot<T>(this object obj)
{
return !(obj is T);
}
Ceux-ci ne seraient pas fonctionnellement équivalents si 'X' était un sous-type de' this.GetType() '. –