У меня есть такой метод, который является упрощенной версией некоторой логики 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.