Я получаю разные результаты при переходе с != true на == false, которые, как я думал, абсолютно одинаковы.

Это мой код

User user = await GetUser(id);

if (user == null || user.Orders?.Any() != true)
{
    ...
}

Если я перейду на user.Orders?.Any() == true, некоторые из моих тестов вернут другие данные. Почему?

c#
1
Gregory Hojar 8 Июн 2021 в 17:05

2 ответа

Лучший ответ

Поскольку user.Orders?.Any() имеют тип bool? из-за '?' после заказов. Таким образом, если user.Orders равно null, тогда результат user.Orders?.Any() будет null и == true будет ложным, а != false будет истинным

9
Quercus 8 Июн 2021 в 14:07

Ваше выражение является логическим выражением, допускающим значение NULL (bool?), Что означает, что оно имеет 3 результата: true, false, null.

Вот почему это не одно и то же != true или == false.

В вашем случае, если пользователь существует и его заказы равны нулю => выражение вернет "нулевой" результат. Так что в случае != true он вернет истину, а в случае == false он вернет ложь, потому что null != true != false.

3
Misha Zaslavsky 8 Июн 2021 в 14:10