Есть ли разница между! (Х ноль) и х является объектом - PullRequest
2 голосов
/ 22 октября 2019

Есть ли разница между !(x is null) и x is object?

Есть ли случаи, когда они будут возвращать разные результаты?

1 Ответ

5 голосов
/ 22 октября 2019

Нет заметной разницы. Они оба компилируются в один и тот же CIL .

Проверьте сами здесь

Примечание : это справедливо даже для типов, допускающих обнуление, как вы можете видеть здесь


Из Стандарт ECMA-334 C # Спецификация языка

12.11.11Оператор is

Оператор is используется для проверки совместимости типа времени выполнения объекта с данным типом. Проверка выполняется во время выполнения. Результатом операции E является T, где E является выражением, а T является типом, отличным от динамического, является логическим значением, указывающим, является ли E ненулевым и может быть успешно преобразовано в тип T с помощью преобразования ссылок,конвертирование в бокс, конвертирование в распаковку, конвертирование в конвертирование или конвертирование в конвертирование.

Обновление

Чтобы быть полностью сжатым и указанным Алексей Левенков

!(1 is null) против 1 is object показывает некоторую разницу, первый не будет компилироваться из-за того, что не обнуляется

...