【发布时间】:2014-09-04 14:12:26
【问题描述】:
更新
在 C#10 中,此语法现在有效,编译器将为 lambda Example here 推断“自然类型”
C# 9 及更早版本
我知道 Func<>s 不能通过 var 关键字直接隐式输入,尽管我更希望我可以对谓词进行以下分配:
Func<Something, bool> filter = (someBooleanExpressionHere)
? x => x.SomeProp < 5
: x => x.SomeProp >= 5;
但是,我收到错误 cannot resolve the symbol, 'SomeProp'
目前,我使用了更繁琐的if branch赋值,看起来并不优雅。
Func<Something, bool> filter;
if (someBooleanExpressionHere)
{
filter = x => x.SomeProp < 5;
}
else
{
filter = x => x.SomeProp >= 5;
}
我是否遗漏了什么,或者我需要坚持 if-branch 分配?
【问题讨论】:
-
你试过在不同的地方添加括号吗?例如
(x => x.SomeProp < 5) -
编译器可能不知道 lambda 变量 x 是什么类型。为什么不将这两个表达式放在单独的变量中,然后使用三元运算符将其中一个分配给过滤器变量?
-
@AlexMDC:做到了。没用。