我对C#很陌生,并且从程序的一个怪异中获得以下重复代码片段:
<div data-bind="attr: {id: 'bookScreen_' + bookId }">
</div>
如您所见,这两个事件处理程序是精确的副本,减去控制器变量名称。实际的程序有更多的事件处理程序,就像这样,并且已经失去控制。
我99%确定有一种方法可以在没有所有这些复制/粘贴的情况下实现相同的结果,但无法弄清楚如何绕过不同的变量名称 - 我可以使用一种方法吗?
我怎样才能重构这段代码而不是那么重复?
答案 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";
}
}