c# - 为什么在这种情况下可空类型不相等?

标签 c# null

令人惊讶的是,下面的代码不会成功。

int? n1 = null;
int? n2 = null;
Assert.IsTrue(n1 <= n2);  // Fails here

你知道为什么吗?

最佳答案

在 C#(和 VB.Net)中使用具有 null 可空值的 bool 逻辑常常违背逻辑。我发现理解它的最好方法是记住“null 不是一个值”。因为 null 不是一个值,所以您不能对其进行任何操作。因此像“1 > null”和“1 < null”这样的东西都是真的。

这里有一份详细的指南:http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx

如果您确实想将 null 视为一个值,那么您可以使用 GetValueOrDefaultMethod() 将 null 等同于默认值。例如

Assert.IsTrue(n1.GetValueOrDefault() <= n2.GetValueOrDefault());  // True

这有点冗长,但可以完成工作。

关于c# - 为什么在这种情况下可空类型不相等?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/785466/

相关文章:

c# - mvc 和 webapi 之间的身份验证(单独的域/应用程序)

c# - 使用 json.net 查询 JArray 的项目属性值

c# - 这个 .NET 7 最小 API 总是返回 200

java/jackson - @JsonValue/@JsonCreator 和 null

C# WPF - 如何更改首先打开的窗口

c# - Entity Framework 无法与 MySql 一起使用

null - 检查变量是否为 NA

Java 可选 - 对存储为 Nullable 对象属性的 Nullable 列表进行排序

python mysqldb使用准备好的语句插入NULL

MySQL 无法选择特定字段值?