【问题标题】:Null-coalescing operator空合并运算符
【发布时间】:2012-09-19 21:36:57
【问题描述】:

我有以下代码:

decimal? a = 2m;
decimal? b = 2m;
decimal c = a ?? 1m * b ?? 1m;

由于ab 都已填写,我期待c 给我4 的结果。

但是,我得到的结果是 2,在这种情况下,b 被视为 1 而不是 2

有谁知道这种行为背后的原因是什么?

【问题讨论】:

    标签: c# null-coalescing-operator


    【解决方案1】:

    如果要获取4的值,对值条件进行分组

    decimal c = (a ?? 1m) * (b ?? 1m);
    

    你当前的语法被评估为

    decimal c = a ?? (1m * b ?? 1m);
    

    以及你得到2值的原因(至于a

    【讨论】:

      【解决方案2】:

      表达式如下:

      decimal c = a ?? (1m * b) ?? 1m;
      

      因为a 有一个值,所以你明白了。

      【讨论】:

        【解决方案3】:
        decimal c = a ?? 1m * b ?? 1m;
        

        等于:

        if (a != null)
            c = a
        else
            ...
        

        在您的情况下,a 不为 null 并且具有 2 的值,所以这就是结果。

        【讨论】:

          猜你喜欢
          • 2013-09-13
          • 2015-03-27
          • 2023-03-23
          • 2012-09-23
          • 1970-01-01
          • 2011-02-20
          • 1970-01-01
          • 1970-01-01
          • 2011-02-13
          相关资源
          最近更新 更多