可空类型和运算符

3
我正在阅读Wrox关于“可空类型和运算符”的内容,其中提到以下语句:
当比较可空类型时,如果操作数中只有一个为null,则比较结果总是false。这意味着你不能因为相反的条件为false就假设条件为true。
我理解第一句话的意思,但不理解第二句话的含义。能否请您解释一下?

你在哪里看到这个的?是在网上吗?我们可以去看一下吗? - undefined
你可以非常肯定地一般性地假设,如果一个条件的相反是假的,那么它就是真的 - 这就是相反的意思。 - undefined
不,这是来自《Professional C# 4 and .NET 4》一书。 - undefined
@R0MANARMY 你找不到一个是因为这是逻辑的基本公理。在我们通常使用的逻辑中,“A或非A”始终成立。请注意,这与A == A不同(在某些情况下在编程中不成立)。 - undefined
它可能在讨论逻辑与和逻辑或的工作原理。 - undefined
2个回答

3
那个引用是错误的,MSDN是官方来源:http://msdn.microsoft.com/en-us/library/2cf62fcy.aspx 当你使用可空类型进行比较时,如果一个可空类型的值为null而另一个不为null,则所有比较都会评估为false,除了!=(不等于)。
第二个语句的意思是,比较及其相反的情况可能都为false,例如a>=b和a
这是逻辑。Null有点像未知值。现在尝试计算5=null、5>null。你无法准确计算其中任何一个,它们既不是真也不是假,它们是未知的,但false比true更有意义。例外是5!=null。一个确定的数字不是未知的,所以它是true比false更有意义。因此,==和!=互为相反,这是简单的情况,但对于大于小于的比较,你不能这样说。这是C#/.NET设计时的一个选择。
另一方面,我认为SQL用3值逻辑做得很好,请参见:http://en.wikipedia.org/wiki/Null_%28SQL%29#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29

3
看起来引文是说,任何与 null 类型的比较都会返回 null,无论操作数如何。
所以像 (null != 5) 这样的东西会返回 false,而 (null == 5) 也会返回 false。
现在,有趣的事情是,当我运行一个程序时,null != 5 返回了true,所以虽然我不能验证该语句对于 c# 2.0 是否正确,但它绝对不再适用于 c# 4.0 +。
这是我使用的示例代码:
int? a = null;

int? b = 5;

if (a != b)
{
    Console.WriteLine("A != B");
}
if (a == b)
{
    Console.WriteLine("A == B");
}

这是输出结果

A 不等于 B
按任意键继续. . .


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接