[英]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.