繁体   English   中英

可空类型和运算符

[英]Nullable Types and Operators

我从Wrox阅读有关Nullable Types和Operators的内容 ,并遇到以下语句:

比较可为空的类型时,如果只有一个操作数为空,则比较将始终等于false。 这意味着您不能仅仅因为条件相反而就假定条件为真。

现在,我明白了第一条陈述的含义,但没有得到第二条陈述。 您能详细说明一下吗?

似乎引号说的是,任何具有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是官方来源: http : //msdn.microsoft.com/en-us/library/2cf62fcy.aspx

当您对可为空的类型执行比较时,如果其中一个可为空的类型的值是null而另一个不是,则所有比较的结果都为false, 除了!=(不等于)

第二条语句仅表示比较及其对立均可能为假,例如a> = b和a <b均为假。

这是逻辑。 空值表示未知值。 现在尝试计算5 <null,5 <= null,5 == null,5> = null,5> null。 您无法精确地计算出其中的任何一个,它们也不是true或false,它们是未知的,但是false比true更有意义。 例外是5!= null。 确切的数字是未知的,因此它比假数字更有意义。 所以==和!=彼此相反,这是简单的情况,但对于比较少的比较,您不能这么说。 他们制作C#/。NET时,这是一种设计选择。

另一方面,我认为SQL使用3值逻辑是正确的,请参见此处: http : //en.wikipedia.org/wiki/Null_%28SQL%29#Comparisons_with_NULL_and_the_three-valued_logic_.283VL.29

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM