是否有更优雅的方法将用户控件添加到列表中?

时间:2012-07-02 10:06:00

标签: asp.net optimization user-controls

我有10个自定义用户控件,ID为usercontrol1,usercontrol2,usercontrol3 ...... usercontrol10。

我想将所有这些用户控件添加到List“allusercontrol”中。我是这样做的蛮力

allusercontrol.Add(usercontrol1);
allusercontrol.Add(usercontrol2);
allusercontrol.Add(usercontrol3);
.
.
.
.
.

是否有一种更优雅,更简单的方法来完成这项琐碎的任务?您确实看到usercontrols ID是系列"usercontrol"+an int

的一部分

3 个答案:

答案 0 :(得分:1)

我建议反对这种方法,因为它容易出错。如果您想重命名它们会怎么样?如果您忘记了这一点并添加了名称为ButtonX且不应该在此列表中的其他控件,该怎么办?

相反,我会在像Panel这样的容器控件中收集它们。 然后,您可以使用LINQ查找相关的Buttons

var myButtons = myPanel.Controls.OfType<Button>();

Enumerable.OfType会相应地过滤和转换控件。如果您想要更多地过滤它们,可以使用Enumerable.Where,例如:

var myButtons = myPanel.Controls
                       .OfType<Button>()
                       .Where(btn => btn.ID.ToLower().StartsWith("button"));

现在您可以迭代那些Buttons,例如:

foreach(Button btn in myButtons)
{
    // do something amazing
}

或者您可以致电ToList()获取List<Button>(问题的核心):

List<Button> allbuttons = myButtons.ToList();

答案 1 :(得分:0)

尝试使用此代码

List<UserControl> controls = new List<UserControl>
{
    usercontrol1,
    usercontrol2,
    usercontrol3
};

答案 2 :(得分:0)

使用Control.ControlCollection.AddRange - 查看here