2010-10-04 2 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#, тогда, ну, многие вещи ошибочны :-) –

+0

Это C#, или, по крайней мере, я заставляю это быть :) –

+2

Ну, это далеко от C#. Начните с описания того, что вы пытаетесь сделать, укажите какой-то контекст, какое сообщение об ошибке вы получаете, что-то вроде этого ... –

ответ

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

Я практикую анонимные методы, потому что они не хотят попасть в мою клавиатуру, поэтому я хочу использовать их как можно больше :) –

+2

@ Daniel - «они не хотят попасть в мою клавиатуру» ??? И это не имеет никакого смысла! –

+1

+1 для inline. Здесь нет необходимости анонимного метода. – tobsen

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; 
}; 
+1

вы можете избавиться от elses – nan

1

Это будет справедливо, если вы замените

ComboBoxEdit encoderCombo= 

с

Func<ComboBoxEdit> encoderCombo =() => 

Примечание - C# 3.0 и выше.

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

Это вид отвратительный, хотя;)

Смежные вопросы