Обратите внимание, что this.GetType()
! = typeof(X)
возвращает значение false, если оно получено из (или реализуется в случае типа интерфейса), но не идентично X, тогда как this is X
возвращает значение true.
Ипочему было бы отдельное ключевое слово, когда вы можете просто использовать !(a is X)
?Это раздутый язык с небольшим выигрышем.Эрик Липперт любит подчеркивать, что каждая новая языковая функция должна предлагать достаточно преимуществ, чтобы компенсировать кодирование, документирование, тестирование и, конечно, повышенную сложность языка.И оператор not is
просто не предлагает достаточно.
Вы можете реализовать метод расширения, но я думаю, что это глупо:
public static bool IsNot<T>(this object obj)
{
return !(obj is T);
}