代码之家  ›  专栏  ›  技术社区  ›  Daniel MoÅ¡mondor

匿名方法不起作用[已关闭]

c#
  •  -1
  • Daniel MoÅ¡mondor  · 技术社区  · 14 年前
    ComboBoxEdit encoderCombo =
    {
       if (slot==1) return cmbEncoder1; 
       else if (slot==2) return cmbEncoder2; 
       else if (slot==3) return cmbEncoder3; 
       else return cmbEncoder4;
    };
    
    4 回复  |  直到 13 年前
        1
  •  5
  •   Justin Niessner    14 年前

    为什么不直接内联整个过程并去掉匿名方法呢?

    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 在闭包中(当事情变得更复杂时可能导致不可预测的行为)。

        2
  •  2
  •   Ben    14 年前

    Func<ComboBoxEdit> encoderCombo = delegate {
        if (slot==1) return cmbEncoder1; 
        else if (slot==2) return cmbEncoder2; 
        else if (slot==3) return cmbEncoder3; 
        else return cmbEncoder4;
    };
    
        3
  •  1
  •   Vilx-    14 年前

    如果你换一个

    ComboBoxEdit encoderCombo=
    

    具有

    Func<ComboBoxEdit> encoderCombo = () =>
    

        4
  •  1
  •   Dan Tao    14 年前

    好吧,你

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

    不过,这有点可怕;)