12

コンストラクター内に記述しようとした次のコードを見てください。

private Predicate<string> _isValid;

//...

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

コードはコンパイルされません-「無効な表現用語」などです。

対照的に、それはコンパイルされ、私はそれを使用することができます:

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

しかし、なぜこの構文が許可されていないのか疑問に思っています。

何か案は?

4

2 に答える 2

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

Will work :)

It parsed it this way:

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

which does not make any sense.

于 2010-07-10T06:41:25.630 に答える
3

C# 文法のこの部分を確認してください。

括弧付き式:
    ( 表現 )

.....

単純名:
    識別子型引数リストopt

.....

条件式または式:
    条件式
    条件式または式 || 条件式

null 合体式:
    条件式または式
    条件式または式 ?? ヌル合体式

条件式:
    ヌル合体式
    null 合体式 ? 式 : 式

ラムダ式:
    匿名関数署名 => 匿名関数本体

あなたの例ではでnull-coalescing-expression終了するため、 として解析されます。括弧で囲むことで、 として解析できます。conditional-or-expressionssimple-nameparenthesized-expression

于 2010-07-10T07:21:39.230 に答える