比较两个空的nullables

Dee*_*ena 2 c# nullable lifted-operators

C#5.0规范在第7.1.3章中介绍

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
 */
Run Code Online (Sandbox Code Playgroud)

显示比较两个可null返回的可空值true.

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

tym*_*167 5

不要混合,这是关于不同类型的运营商.

•对于相等运算符==!=如果操作数类型都是非可空值类型且结果类型为bool,则存在运算符的提升形式.提升形式是通过添加一个?每个操作数类型的修饰符.提升的运算符认为两个空值相等,并且空值不等于任何非空值.如果两个操作数都为非null,则提升的运算符将解包操作数并应用基础运算符以生成bool结果.

•对于关系运算符<> <=> =如果操作数类型都是非可空值类型且结果类型为bool,则存在运算符的提升形式.提升形式是通过添加一个?每个操作数类型的修饰符.如果一个或两个操作数为空,则提升的运算符将生成值false.否则,提升的运算符解包操作数并应用基础运算符以产生bool结果.