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

本文关键字:编码 一次 循环 | 更新日期: 2023-09-27 18:20:23

我在这里有这段代码,我用它来绘制控件,我用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执行完全相同的操作。控件,如何避免复制粘贴?

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

创建一个以控件集合为参数的方法。类似于:

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

您应该将其提取到一个单独的方法(可能是静态的)中

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

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)

以这种方式使用过载

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){
}

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