令人惊讶的是,下面的代码不会成功。
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/