代码之家  ›  专栏  ›  技术社区  ›  Matthias

空合并运算符与lambda表达式

  •  8
  • Matthias  · 技术社区  · 14 年前

    请看我试图在构造函数中编写的以下代码:

    private Predicate<string> _isValid;
    
    //...
    
    Predicate<string> isValid = //...;
    this._isValid = isValid ?? s => true;
    

    代码没有编译-只是“无效表达式项”等一个。

    this._isValid = isValid ?? new Predicate<string>(s => true);
    

    但是,我仍然想知道为什么不允许使用这种语法。

    有什么想法吗?

    2 回复  |  直到 14 年前
        1
  •  13
  •   Lasse Espeholt    14 年前
    this._isValid = isValid ?? (s => true);
    

    将工作:)

    它这样分析:

    this._isValid = (isValid ?? s) => true;
    

    这毫无意义。

        2
  •  3
  •   ChaosPandion    14 年前

    看看C#语法的这部分:

    parenthesized-expression:
        (   expression   )
    
    .....
    
    simple-name:
        identifier   type-argument-listopt
    
    .....
    
    conditional-or-expression:
        conditional-and-expression
        conditional-or-expression   ||   conditional-and-expression
    
    null-coalescing-expression:
        conditional-or-expression
        conditional-or-expression   ??   null-coalescing-expression
    
    conditional-expression:
        null-coalescing-expression
        null-coalescing-expression   ?   expression   :   expression
    
    lambda-expression:
        anonymous-function-signature   =>   anonymous-function-body
    

    null-coalescing-expression 终止于 conditional-or-expression 这个 s 在您的示例中,将解析为 simple-name parenthesized-expression .