C# 在C中为同一表达式获得不同的结果

C# 在C中为同一表达式获得不同的结果,c#,C#,从更改时,我会得到不同的结果!=我认为这是完全一样的 这是我的密码 User user = await GetUser(id); if (user == null || user.Orders?.Any() != true) { ... } 如果我改为user.Orders?.Any==true,我的一些测试将返回不同的数据。为什么?因为用户。订单?有订单吗?类型,因为订单后面有“?”。 所以,若user.Orders为null,那个么user.Orders?的结果将为null,==

从更改时,我会得到不同的结果!=我认为这是完全一样的

这是我的密码

User user = await GetUser(id);

if (user == null || user.Orders?.Any() != true)
{
    ...
}
如果我改为user.Orders?.Any==true,我的一些测试将返回不同的数据。为什么?

因为用户。订单?有订单吗?类型,因为订单后面有“?”。 所以,若user.Orders为null,那个么user.Orders?的结果将为null,==true将为false,而!=false将为true,因为user.Orders?有bool吗?类型,因为订单后面有“?”。
所以,若user.Orders为null,那个么user.Orders?的结果将为null,==true将为false,而!=false将为true

您的表达式是一个可为空的布尔表达式bool?这意味着它有3个结果:true、false和null

这就是为什么它不一样!=真或=假


在您的例子中,如果用户存在并且他的订单为null=>表达式将返回null结果。因此,在这种情况下!=true它将返回true,如果==false,它将返回false,因为null!=真的false。

您的表达式是可为空的布尔表达式布尔?这意味着它有3个结果:true、false和null

这就是为什么它不一样!=真或=假

在您的例子中,如果用户存在并且他的订单为null=>表达式将返回null结果。因此,在这种情况下!=true它将返回true,如果==false,它将返回false,因为null!=真的false。

是否为用户。订单为空?是否为用户。订单为空?