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