代码之家  ›  专栏  ›  技术社区  ›  Dee J. Doena

比较两个空可空值

  •  2
  • Dee J. Doena  · 技术社区  · 9 年前

    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
     */
    

    显示比较两个同时为空的值 无效的 返回 true .

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

    2 回复  |  直到 9 年前
        1
  •  5
  •   tym32167    9 年前

    不要混合,这是关于不同类型的操作员。

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

    对于关系运算符 <><=>= 如果操作数类型都是不可为空的值类型,并且结果类型为bool,则存在运算符的提升形式。提升形式是通过添加单个?每个操作数类型的修饰符。 如果一个或两个操作数均为空,提升运算符将生成值false

        2
  •  4
  •   Evk    9 年前

    对于等式运算符 提升形式是通过添加单个?每个的修饰语 操作数类型。 提升运算符认为两个空值相等,并且 不等于任何非空值的空值 如果两个操作数均为 非空,提升运算符展开操作数并应用 生成布尔结果的基础运算符。

    推荐文章