Patrick Skelton Ответов: 3

В чем преимущество тестирования на null с использованием ключевого слова 'is'?


После недавнего обновления Visual Studio я теперь получаю маленькие зеленые точки, появляющиеся под кодом, указывающие места, где я мог бы модернизировать и предположительно улучшить свой код, чтобы использовать последние функции C#.

Один из них рекомендует провести тестирование на нулевой используя является ключевое слово. Напр..

Не пиши...

if( x == null )


Лучше напиши вот это...

if( x is null )


Я хотел бы понять преимущество этого, и я, кажется, не могу найти простой ответ на этот вопрос нигде. Кто-нибудь?

Что я уже пробовал:

Я пытался погуглить вокруг, но, похоже, не смог найти прямого ответа.

Jochen Arndt

Первый хит для "c# is null vs == null":
https://stackoverflow.com/questions/40676426/what-is-the-difference-between-x-is-null-and-x-null

Прямой ответ находится в этой теме:
Для этого частного случая нет никакой разницы (проверка на null).

Patrick Skelton

Я думаю, я погуглил-в чем преимущества C# является оператор.

3 Ответов

Рейтинг:
27

Graeme_Grant

Существует подробный пост в блоге, который может ответить на этот вопрос для вас: "is null" против "== null" в C#[^]


Рейтинг:
18

F-ES Sitecore

Я погуглил "== null vs is null", и это был первый результат

c# - в чем разница между "x is null" и "x == null"? - переполнение стека[^]

Есть еще много результатов, если вы ищете сами.

Основная проблема, по-видимому, заключается в том, что вы можете перегрузить"==", чтобы изменить его поведение, поэтому при использовании "== null" у вас нет никакой гарантии, какой код на самом деле вызывается и как определяется "== null". Например, если у меня есть класс Person, я могу перегрузить == для Person, чтобы сказать, что если у человека нет идентификатора, то он равен нулю. Когда ваш код использует "if (p == null)", результат может быть "true", несмотря на то, что переменная "p" на самом деле не является нулевой ссылкой.

Однако когда вы используете "is", это не может быть перегружено, поэтому проверка "is null" дает более точное представление о том, является ли переменная нулевой ссылкой или нет.