【发布时间】:2021-07-17 18:13:44
【问题描述】:
我希望有条件地执行一个动作,所以我决定将它重新分配给一个空函数,如下所示:
public void ActionReassingnment1(bool doIt) {
bool myBool = true;
Action myAction = () => { myBool = false; };
myAction = doIt ? myAction : () => { };
}
对于我的示例 lambda,我使用 myBool 不是空的,只是占位符没有意义的逻辑。
问题是,如果没有中间变量myAction,我无法使用三元运算符直接在真实语句中进行赋值,如下所示:
public void ActionReassingnment2(bool doIt)
{
bool myBool = true;
//Action myAction = () => { myBool = false; };
myAction = doIt ? () => { myBool = false; }; : () => { }; //Error here
}
由于() => { myBool = false; }; lambda 中的;,我知道: 是预期的。有道理,但无论我尝试什么,我都无法直接适应 lambda。
我尝试用 (() => { myBool = false; };) 或 {() => { myBool = false; };} 包装 lambda,但没有成功。
很多时候我得到的编译错误是type of conditional expression cannot be determined because there is no implicit conversion between 'lambda expression' and 'lambda expression'
令我惊讶的是,在错误的陈述中,lambda 适合。
可以在三元运算符的真语句中赋值 lambda 吗?如果是这样,怎么做?如果不是,那为什么在虚假陈述中呢?
【问题讨论】:
标签: c# lambda anonymous-function conditional-operator