如何从私有类调用泛型列表

本文关键字:调用 泛型 列表 | 更新日期: 2023-09-27 17:55:26

我在私有助手方法中放置了一个泛型列表...

    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()中调用按钮时,"按钮"下方会出现红线,表示找不到它。请有人帮忙:)

如何从私有类调用泛型列表

您的方法应返回列表:

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

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


另请查看方法(C# 编程指南),其中有关返回值的方法的部分:

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


PS:查看我的答案 如何缩短此通用列表?.可能这仍然是一个更好的方法?

将代码更改为:

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

像这样使用它 -

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