Почему я получаю разыменование в возможно нулевом эталонном предупреждении при использовании без короткого замыкания и оператора? - PullRequest
2 голосов
/ 07 апреля 2020

У меня есть такой метод, который является упрощенной версией некоторой логики c в производственном коде:

static void Foo(int a, int b, string x, string y)
{
     if (a > 100 && b < 50 && (x != null) & (y != null))
     {
          Console.WriteLine(y.Length);
     }
}

Я получаю ошибку «Разыменование нулевой ссылки» при доступе к y.Length.

Если я изменю & на &&, предупреждение исчезнет. Я не мог понять, почему, на первый взгляд, потом подумал, что это может быть из-за того, что оператор & перегружен, поэтому его поведение может измениться и, возможно, оно будет оценено как true, даже если y равно нулю. Является ли мое предположение правильным или я что-то упускаю?

Примечание. Я могу воспроизвести это в приложении, предназначенном для NET Core 3.1 или. NET Standard 2.0 с использованием Visual Studio 2019.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...