سؤال

ألق نظرة على الكود التالي الذي حاولت كتابته داخل المُنشئ:

private Predicate<string> _isValid;

//...

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

لا يتم تجميع الكود - فقط "مصطلح تعبير غير صالح" وهكذا.

على النقيض من ذلك، يتم تجميع ذلك ويمكنني استخدامه فقط:

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

ومع ذلك، ما زلت أتساءل لماذا لا يسمح ببناء الجملة هذا.

أيه أفكار؟

هل كانت مفيدة؟

المحلول

giveacodicetagpre.

ستعمل :)

تحلله بهذه الطريقة:

giveacodicetagpre.

أي معنى.

نصائح أخرى

تحقق من هذا الجزء من قواعد 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 في المثال الخاص بك سيتم تحليله كـ a simple-name.ومن خلال لفه بين قوسين، يمكن بعد ذلك تحليله كـ a parenthesized-expression.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top