عامل الدمج الفارغ وتعبير لامدا
-
13-09-2020 - |
سؤال
ألق نظرة على الكود التالي الذي حاولت كتابته داخل المُنشئ:
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
.
لا تنتمي إلى StackOverflow