ComboBoxEdit encoderCombo =
{
if (slot==1) return cmbEncoder1;
else if (slot==2) return cmbEncoder2;
else if (slot==3) return cmbEncoder3;
else return cmbEncoder4;
};
答案 0 :(得分:5)
为什么不直接内联整个事情并摆脱匿名方法?
ComboBoxEdit encoderCombo = slot == 1 ? cmbEncoder1 :
slot == 2 ? cmbEncoder2 :
slot == 3 ? cmbEncoder3 :
cmbEncoder4;
如果你真的必须使用匿名方法,你可以做类似的事情:
Func<ComboBoxEdit> encoderCombo = () =>
slot == 1 ? cmbEncoder1 :
slot == 2 ? cmbEncoder2 :
slot == 3 ? cmbEncoder3 :
cmbEncoder4;
这将捕获闭包中slot
的值(当事情变得更复杂时,可能会导致不可预测的行为)。
答案 1 :(得分:2)
如果这是C#,那么这不是一个有效的匿名函数。
Func<ComboBoxEdit> encoderCombo = delegate {
if (slot==1) return cmbEncoder1;
else if (slot==2) return cmbEncoder2;
else if (slot==3) return cmbEncoder3;
else return cmbEncoder4;
};
答案 2 :(得分:1)
如果替换
,它将有效ComboBoxEdit encoderCombo=
与
Func<ComboBoxEdit> encoderCombo = () =>
注 - C#3.0及以上版本。
答案 3 :(得分:1)
好吧,你可以这样做:
ComboBoxEdit encoderCombo = new Func<ComboBoxEdit>(() =>
{
if (slot==1) return cmbEncoder1;
else if (slot==2) return cmbEncoder2;
else if (slot==3) return cmbEncoder3;
else return cmbEncoder4;
}).Invoke();
但这有点可怕;)