如何从私人课程中调用通用列表?

时间:2013-01-24 01:12:35

标签: c# winforms visual-studio-2012

我将通用列表放在私人帮助方法中......

    private void addButton()
    {
        List<Button> buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9); 
    }

我知道要调用这种方法你必须做这样的事情......

    private void button1_Click(object sender, EventArgs e)
    {
            addButton();

            foreach (button in addButton())
            {
                button.Enabled = false;
            }
    }

然而......当我尝试在addButton()中调用按钮时,“按钮”下方出现红线,表示无法找到它。请有人帮忙:))

3 个答案:

答案 0 :(得分:4)

您的方法应该返回列表:

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    //...
    return buttonList;
}

此外,您不需要第一个addButton();

private void button1_Click(object sender, EventArgs e)
{
        foreach (Button button in addButton())
        {
            button.Enabled = false;
        }
}

我希望用yield关键字重写此方法:

private IEnumerable<Button> addButton()
{
    yield return button1;
    yield return button2;
    //...
    yield return button9;
}

因为您不需要创建按钮列表,只需在每次需要时浏览它们。只需枚举它们就足够了。


另请参阅Methods (C# Programming Guide),有关返回值的方法的部分:

  

方法可以向调用者返回一个值。如果是返回类型,则为类型   在方法名称之前列出,不是void,那么该方法可以返回   使用return关键字的值。带有关键字的语句   返回后跟一个与返回类型匹配的值将返回   该方法调用者的值。 return关键字也会停止   执行该方法。如果返回类型为void,则返回   没有值的语句对于停止执行仍然有用   方法。如果没有return关键字,该方法将停止执行   当它到达代码块的末尾。具有非空隙的方法   返回类型是使用return关键字返回值所必需的。


P.S。:在How do I shorten this generic list?中查看我的答案。可能这仍然是一种更好的方法吗?

答案 1 :(得分:0)

将您的代码更改为:

private List<Button> addButton()
{
    List<Button> buttonList = new List<Button>();

    buttonList.Add(button1);
    buttonList.Add(button2);
    buttonList.Add(button3);
    buttonList.Add(button4);
    buttonList.Add(button5);
    buttonList.Add(button6);
    buttonList.Add(button7);
    buttonList.Add(button8);
    buttonList.Add(button9); 

    return buttonList;
}


private void button1_Click(object sender, EventArgs e)
{
     foreach (var button in addButton())
     {
          button.Enabled = false;
     }
}

答案 2 :(得分:0)

像这样使用它 -

    List<Button> buttonList;
    private List<Button> addButton()
    {
        buttonList = new List<Button>();

        buttonList.Add(button1);
        buttonList.Add(button2);
        buttonList.Add(button3);
        buttonList.Add(button4);
        buttonList.Add(button5);
        buttonList.Add(button6);
        buttonList.Add(button7);
        buttonList.Add(button8);
        buttonList.Add(button9);
    }

    private void button1_Click(object sender, EventArgs e)
    {
        addButton();

        foreach (button in buttonList)
        {
            button.Enabled = false;
        }
    }