Null-coalescing operator and lambda expression

后端 未结 2 1224
Happy的楠姐
Happy的楠姐 2020-12-10 14:02

take a look at the following code I attempted to write inside a constructor:

private Predicate _isValid;

//...

Predicate isVali         


        
相关标签:
2条回答
  • 2020-12-10 14:47
    this._isValid = isValid ?? (s => true);
    

    Will work :)

    It parsed it this way:

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

    which does not make any sense.

    0 讨论(0)
  • 2020-12-10 14:54

    Check out this portion of the C# grammar:

    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
    

    Since null-coalescing-expression terminates with conditional-or-expression the s in your example will parse as a simple-name. By wrapping it in parentheses it can then be parsed as a parenthesized-expression.

    0 讨论(0)
提交回复
热议问题