2010-10-04 61 views
-1
ComboBoxEdit encoderCombo = 
{ 
    if (slot==1) return cmbEncoder1; 
    else if (slot==2) return cmbEncoder2; 
    else if (slot==3) return cmbEncoder3; 
    else return cmbEncoder4; 
}; 
+0

什麼語言是什麼? .NET是不是一種語言,如果這應該是C#那麼,很多事情都是錯誤的:-) – 2010-10-04 19:14:15

+0

這是c#,或者至少我強迫它:) – 2010-10-04 19:14:47

+2

那麼,這遠離C#。首先描述你正在做什麼,提供一些上下文,你會得到什麼錯誤信息,像這樣的事情... – 2010-10-04 19:15:58

回答

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在封閉的值(這可能會導致不可預知的行爲事態更復雜)。

+0

我在練習匿名方法,因爲他們不想進入我的鍵盤,所以我想用它們儘可能多:) – 2010-10-04 19:18:04

+2

@丹尼爾 - 「他們不想進入我的鍵盤」?這樣做沒有任何意義!對於內聯,爲 – 2010-10-04 19:24:23

+1

+1。這裏不需要匿名方法。 – tobsen 2010-10-04 19:59:41

2

如果這是C#,那麼這不是一個有效的匿名函數。 C#3.0及以上 -

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

你可以擺脫elses – nan 2010-10-04 19:22:49

1

,如果你有

Func<ComboBoxEdit> encoderCombo =() => 

注意更換

ComboBoxEdit encoderCombo= 

這將是有效的。

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

這是一種可怕的,雖然;)