通过循环一次避免多次编码

时间:2014-09-03 07:44:01

标签: c#

我这里有这个代码用于绘制控件,我使用foreach遍历每个元素。

foreach (e.Control ctrl in Sheet1.Controls)
{
    switch (ctrl.TYPE)
    {
       case "StaticText":
            CompareControls.StaticText lbl = new CompareControls.StaticText();
            page1.tabPage1.Controls.Add(lbl);
               break;
       case "CheckBox":
               break;
     }
}

我需要对Sheet2.Controls做同样的事情,我该如何避免复制粘贴?

4 个答案:

答案 0 :(得分:0)

您应该将其提取为单独的方法(可能是静态的)

public static void MethodName (IEnumerable<Control> controls)
{
    foreach (var ctrl in controls)
    {
        switch (ctrl.TYPE)
        {
           case "StaticText":
              CompareControls.StaticText lbl = new CompareControls.StaticText();        
              page1.tabPage1.Controls.Add(lbl);        
              break;

           case "CheckBox":        
              break;        
          }
     }
}

答案 1 :(得分:0)

创建一个将控件集合作为参数的方法。类似的东西:

private void Function(IEnumerable<Control> controls)
        {
            foreach (e.Control ctrl in controls)
            {
                switch (ctrl.TYPE)
                {
                    case "StaticText":
                        CompareControls.StaticText lbl = new CompareControls.StaticText();
                        page1.tabPage1.Controls.Add(lbl);
                        break;
                    case "CheckBox":

                        break;
                }
            }
        }

然后你可以打电话给它:

Function(Sheet1.Controls);

答案 2 :(得分:0)

Sheet1,Sheet2的类型是什么。说 - 表。

private void loopThroughSheet(Sheet _sheet)
{
   foreach (e.Control ctrl in _sheet.Controls)
            {
                switch (ctrl.TYPE)
                {
                    case "StaticText":
                        CompareControls.StaticText lbl = new CompareControls.StaticText();


                        page1.tabPage1.Controls.Add(lbl);

                        break;

                    case "CheckBox":

                        break;

                }
            }
}

现在在您的主要代码中,只需致电loopThroughSheet(Sheet1)loopThroughSheet(Sheet2)

答案 3 :(得分:0)

以这种方式使用重载

foreach (e.Control ctrl in Sheet1.Controls)
{   
    DoOperation(ctrl)
}

然后外面

public void function DoOperation(CompareControls.StaticText ctrl){
  CompareControls.StaticText lbl = new CompareControls.StaticText();
  page1.tabPage1.Controls.Add(lbl);
}

public void function DoOperation(CheckBox ctrl){

}

通过这种方式,您可以管理每种类型的控件,而无需在case中添加switch。您只需添加DoOperation函数

的重载