匿名方法不起作用

时间:2010-10-04 19:12:41

标签: c#

ComboBoxEdit encoderCombo =
{
   if (slot==1) return cmbEncoder1; 
   else if (slot==2) return cmbEncoder2; 
   else if (slot==3) return cmbEncoder3; 
   else return cmbEncoder4;
};

4 个答案:

答案 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();

但这有点可怕;)