C# 可为空的类型和运算符

C# 可为空的类型和运算符,c#,c#-2.0,C#,C# 2.0,我从Wrox中阅读了有关可空类型和运算符的内容,遇到了以下语句: 在比较可为null的类型时,如果只有一个操作数为null,则比较将始终等于false。这意味着您不能仅仅因为条件的对立面为false就假定条件为true 现在,我明白了第一句话的意思,但没有明白第二句话的意思。 请您详细说明一下好吗?这句话似乎是说,不管操作数是什么,使用null类型的任何比较都将返回null 所以像(null!=5)这样的东西会返回false,其中(null==5)也会返回false 现在,有趣的是,当我运行一

我从Wrox中阅读了有关可空类型和运算符的内容,遇到了以下语句:

在比较可为null的类型时,如果只有一个操作数为null,则比较将始终等于false。这意味着您不能仅仅因为条件的对立面为false就假定条件为true

现在,我明白了第一句话的意思,但没有明白第二句话的意思。
请您详细说明一下好吗?

这句话似乎是说,不管操作数是什么,使用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
按任意键继续


该引用是错误的,MSDN是官方来源:

在与可为null的类型进行比较时,如果 所有比较中,可为null的类型中的一个为null,另一个不是 计算为false除了!=(不相等)


第二种说法仅仅意味着一个比较和它的对立面可能都是假的,例如a>=b和a你在读这个吗?它是在线的某个地方,我们可以去看它吗?你可以肯定的是,如果一个条件的对立面是假的,那么它就是真的——这就是对立面的意思。不,它来自专业书籍C#4和.NET4@R0MANARMY你找不到,因为这是逻辑的基本公理。在我们通常使用的逻辑中,“A或不是A”总是成立的。请注意,这与
A==A
(在某些情况下编程时不适用)不同。它可能是在讨论逻辑and和逻辑or的工作方式