C# 匿名方法不起作用

C# 匿名方法不起作用,c#,C#,为什么不直接内联整件事,去掉匿名方法呢 ComboBoxEdit encoderCombo = { if (slot==1) return cmbEncoder1; else if (slot==2) return cmbEncoder2; else if (slot==3) return cmbEncoder3; else return cmbEncoder4; }; 如果您确实必须使用匿名方法,则可以执行类似的操作: ComboBoxEdit encoderC

为什么不直接内联整件事,去掉匿名方法呢

ComboBoxEdit encoderCombo =
{
   if (slot==1) return cmbEncoder1; 
   else if (slot==2) return cmbEncoder2; 
   else if (slot==3) return cmbEncoder3; 
   else return cmbEncoder4;
};
如果您确实必须使用匿名方法,则可以执行类似的操作:

ComboBoxEdit encoderCombo = slot == 1 ? cmbEncoder1 :
                            slot == 2 ? cmbEncoder2 :
                            slot == 3 ? cmbEncoder3 :
                            cmbEncoder4;
Func encoderCombo=()=>
插槽==1?CMBR1:
插槽==2?CMBR2:
插槽==3?CMBR3:
CMBr4;
它将捕获闭包中
插槽的值(随着事情变得越来越复杂,可能会导致不可预测的行为)。

如果这是C#,那么这不是有效的匿名函数

Func<ComboBoxEdit> encoderCombo = () => 
                            slot == 1 ? cmbEncoder1 :
                            slot == 2 ? cmbEncoder2 :
                            slot == 3 ? cmbEncoder3 :
                            cmbEncoder4;
Func encoderCombo=委托{
if(slot==1)返回cmbEncoder1;
否则,如果(插槽==2)返回CMBNcoder2;
否则,如果(插槽==3)返回cmbEncoder3;
否则返回CMBR4;
};

如果您更换

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

Func encoderCombo=()=>
注意-C#3.0及以上版本。

好吧,您可以这样做:

Func<ComboBoxEdit> encoderCombo = () =>
ComboBoxEdit encoderCombo=new Func(()=>
{
if(slot==1)返回cmbEncoder1;
否则,如果(插槽==2)返回CMBNcoder2;
否则,如果(插槽==3)返回cmbEncoder3;
否则返回CMBR4;
}).Invoke();

不过,这有点可怕;)

这是什么语言。NET不是一种语言,如果这应该是C,那么,好吧,很多事情都是错的:-)它是C,或者至少我强迫它是:)好吧,这离C很远。首先,描述你正在尝试做的事情,提供一些上下文,你收到了什么错误消息,诸如此类……我正在练习匿名方法,因为它们不想进入我的键盘,所以我希望尽可能多地使用它们:)@Daniel—“它们不想进入我的键盘”???这没有任何意义+1用于内联。这里不需要匿名方法。
Func<ComboBoxEdit> encoderCombo = () =>
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();