通过循环一次来避免多重编码
本文关键字:编码 一次 循环 | 更新日期: 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
函数的重载