使用更改变量重构代码?

时间:2016-06-27 07:34:25

标签: c# visual-studio refactoring

我对C#很陌生,并且从程序的一个怪异中获得以下重复代码片段:

 <div data-bind="attr: {id: 'bookScreen_' + bookId }">
 </div>

如您所见,这两个事件处理程序是精确的副本,减去控制器变量名称。实际的程序有更多的事件处理程序,就像这样,并且已经失去控制。

我99%确定有一种方法可以在没有所有这些复制/粘贴的情况下实现相同的结果,但无法弄清楚如何绕过不同的变量名称 - 我可以使用一种方法吗?

我怎样才能重构这段代码而不是那么重复?

1 个答案:

答案 0 :(得分:3)

基本上,您可以对所有SubjectBox控件使用单个事件处理程序实现方法。根据发送事件的人,您可以决定使用哪些其他控件来用于您的逻辑。

如果是这种情况,可以采取一些措辞:感觉您的表单可能很复杂,或者您可以为所有框引入UserControl曝光属性。

    private void SubjectBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        SubjectBox_SelectedIndexChangedImpl((SomeBox)sender, aBox1, nBox1, cBox1, mBox1, maxBox1);
    }

    private void SubjectBox2_SelectedIndexChanged(object sender, EventArgs e)
    {
        SubjectBox_SelectedIndexChangedImpl((SomeBox)sender, aBox2, nBox2, cBox2, mBox2, maxBox2);
    }

    private void SubjectBox_SelectedIndexChangedImpl(SomeBox sender, SomeBox aBox, SomeBox nBox, SomeBox cBox, ......)
    {
        string[] igcseSubjects = new string[5] { "IGCSE Maths", "IGCSE English", "IGCSE Chem", "IGCSE Phys", "IGCSE Bio" };
        string selectedSubject = (string)subjectBox.SelectedItem;
        if (igcseSubjects.Contains(selectedSubject))
        {
            nBox.Visible = aBox.Visible = mBox.Visible = eBox.Visible = false;
            cBox.Visible = true;
            maxBox.Text = "100";
        }
        else
        {
            nBox.Visible = aBox.Visible = mBox.Visible = eBox.Visible = true;
            cBox.Visible = false;
            maxBox.Text = "20";
        }
    }