C# игнорирует нулевую проверку? - PullRequest
0 голосов
/ 20 июня 2020

Кто может объяснить мне эту иррациональную хромую красоту C# logi c в blazor-server?

введите описание изображения здесь

Ответы [ 3 ]

4 голосов
/ 20 июня 2020

Что такое club, и, возможно, у него есть перегрузка оператора stati c ==, которая не является нулевой безопасностью? Например, следующее возможно и неверно:

bool == (Foo x, Foo y) => x.Id == y.Id;

Не работает, потому что не учитывает, что x и / или y могли быть null. Использование club == null вызовет этот неработающий оператор, вызывая NRE.

Хороший способ проверки - использовать club is object вместо club != null, так как синтаксис is object / is null never вызовы stati c == операторские перегрузки.

0 голосов
/ 20 июня 2020

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

ReferenceEquals(myObject, null)

Это метод stati c из самого класса Object, поэтому в основном его можно использовать везде.

Большинство в большинстве случаев это даст тот же результат, что и:

myObject == null

Но поскольку "==" может быть перегружено, вы можете вести себя странно. См. перегрузка оператора .

0 голосов
/ 20 июня 2020

Возможно, вам стоит сравнить club с null следующим образом:

if (!(club is null) && club.Id > 0)

Я думаю, что исключение NullReferenceException вызвано оператором ==, который может использовать методы, не являющиеся «нулевыми безопасными».

...