2016-10-05 39 views
2

的C#5.0规范中读取章节7.1.3比较两个空nullables

https://msdn.microsoft.com/en-us/library/ms228593.aspx

提升运算的结果为false如果一个或两个操作数null

但是测试也该MSDN链接

http://msdn.microsoft.com/en-us/library/2cf62fcy(v=vs.100).aspx

int? num1 = 10; 
int? num2 = null; 

// Change the value of num1, so that both num1 and num2 are null. 
num1 = null; 
if (num1 == num2) 
{ 
    // The equality comparison returns true when both operands are null. 
    Console.WriteLine("num1 == num2 returns true when the value of each is null"); 
} 

/* Output: 
* num1 == num2 returns true when the value of each is null 
*/ 

显示,比较两者都是null回报true 2个空的值。

它是有道理的,但它与规范的句子相矛盾,不是吗?

+0

我在章节7.3.7中找到了这个。注意这是针对'二元操作符'的。下一节将讨论'平等运算符',其中包括'=='。 – Gavin

+1

[空条件运算符可能重复bool而不是bool?如预期般](http:// stackoverflow。COM /问题/ 37277102 /空条件运营商 - 测定到的BOOL不是对布尔 - 如预期) –

回答

5

不要混用,这是关于不同类型的运营商。

•对于相等运算 ==!= 操作者的提升形式存在如果操作数类型都是非空值类型,并且如果结果类型是布尔。解除表格是通过添加单个?修饰符到每个操作数类型。 解除运算符认为两个空值等于,并且空值不等于任何非空值。如果两个操作数都是非空值,则解除操作符展开操作数并应用底层操作符生成布尔结果。

•对于关系运算符 <> < => = 操作者的提升形式存在如果操作数类型都是非空值类型,并且如果结果类型是布尔。解除表格是通过添加单个?修饰符到每个操作数类型。 如果一个或两个操作数为空,提升的运算符会生成值false。否则,提升的操作员解开操作数并应用底层操作员生成布尔结果。

+0

感谢。太盲目了... –

3

规格后说,

•对于相等运算 ==!=操作员的提升形式存在,如果操作数类型都是非空值类型,如果结果类型为布尔。 解除表格是通过添加一个单一的?每个 操作数类型的修饰符。 解除运算符认为两个空值相等,并且 空值不等于任何非空值。如果两个操作数都是非空的 ,则解除操作符展开操作数并应用底层操作符生成布尔结果。

+0

喔,你是第一个,你赢了:d – tym32167

+0

感谢。太盲目看... –