减少C#中的代码冗余

时间:2011-12-07 17:26:11

标签: c#

我很想修补C#,到目前为止,这是它的范围。我只是在修补我的一个小项目。

但是,冗余让我疯狂。编写一长串类似代码的长列表并不适合我。

我有几个选项卡,其中包含复选框和单选按钮,这是我注意到最重复的地方。不幸的是,我......还没有完全掌握C#的各个方面。所以我希望向大家学习。

示例:

//setup checkbox
    checkBox1.AutoSize = true;
    checkBox1.Checked = false;
    checkBox1.CheckState = CheckState.Unchecked;
    checkBox1.Location = new Point(5, 102);
    checkBox1.Text = "Check Box 1!";
    checkBox1.UseVisualStyleBackColor = true;

//set radio 1
    radio1.AutoSize = true;
    radio1.Checked = true;
    radio1.Location = new Point(5, 33);
    radio1.Size = new Size(20, 20);
    radio1.Text = "Radio-e-o-e-o";
    radio1.UseVisualStyleBackColor = true;
//set radio 2
    radio2.AutoSize = true;
    radio2.Checked = false;
    radio2.Location = new Point(5, 56);
    radio2.Size = new Size(18, 20);
    radio2.Text = "Option 2!";
    radio2.UseVisualStyleBackColor = true;

我的直觉是用名称和不同数据之类的东西设置一些带有变量数据的数组。但正如我所说的,我很新,我只是在修补......而我所遇到的资源往往要么与我正在寻找的不匹配,要么添加复杂的层次我可能不是准备好了。

5 个答案:

答案 0 :(得分:4)

如果我的问题是对的:你可以制定方法:

private CheckBox DoSomethingWith(CheckBox checkBox, Point location, string text)
{
    checkBox.AutoSize = true; 
    checkBox.Checked = false; 
    checkBox.CheckState = CheckState.Unchecked; 
    checkBox.Location = location;
    checkBox.Text = text; 
    checkBox.UseVisualStyleBackColor = true;

    return checkBox;    
}

然后将复选框传递给它checkBox1 = DoSomethingWith(checkBox1, new Point(10,10), "My Text");

答案 1 :(得分:4)

您可以创建自己的继承自RadioButton的类,设置默认设置并使用它。

public class MyRadioButton : public RadioButton
{
   MyRadioButton() 
   {
       UseVisualStyleBackColor = true;
       AutoSize = true;
   }
}

然后您只需添加此控件而不是RadioButton

答案 2 :(得分:2)

所以......你想重构Form1.designer.cs文件吗?

为了“清理代码”,你所做的任何“清理”都会给CPU带来不必要的负担。只需让设计师参与(除非您正在谈论重复设计,在这种情况下,用户控制可能是最佳选择)。

这些是我对此的印象,无论如何

答案 3 :(得分:1)

如果你要做的只是修补,而不是建立一个完整的应用程序架构,你自己写这个,而不是试图弄乱设计师生成的代码,然后使用某种结构你可以循环可能是你最好的选择。 LINQ有一些非常好的运算符可以进行简单的转换。

例如,

var formElements = myArrayofElementInfo.Select(e => CheckBox(e.Point, e.Text))

这也假设您正在使用@ Sean87提供的CheckBox方法来整合构造。

答案 4 :(得分:1)

也许您可以通过创建初始化控件的方法来减少冗余,将控件作为参数传递(您也可以在方法内部创建控件)。例如:

public void setupCheckbox (Checkbox checkbox, boolean autoSize, boolean checked, etc.)
public void setupRadioButton (RadioButton radiobutton, boolean autoSize, boolean checked, etc.)

然后使用上述方法创建控件:

setupCheckbox (checkBox1, true, false, etc.)
setupRadioButton (radio1, true, false, etc)
setupRadioButton (radio2, true, false, etc)

无论如何,您所引用的类的可视属性通常在IDE中定义(例如Visual Studio),因此通常您不关心它们。如果你觉得它很有用,也许可以考虑将Text存储在一个数组中,以便初始化不同的控件。