C# 重构If语句
我必须为我的C#编程评估创建一个评分系统,目前我正在尝试重构冗余代码C# 重构If语句,c#,.net,wpf,C#,.net,Wpf,我必须为我的C#编程评估创建一个评分系统,目前我正在尝试重构冗余代码 foreach (Student item in mark) { if (ComboBoxGradeMethod.SelectedIndex == 0) { item.Grade = vetMethod.VETGrade(item.Mark); } else if (ComboBoxGradeMethod.SelectedIndex == 1) { ite
foreach (Student item in mark)
{
if (ComboBoxGradeMethod.SelectedIndex == 0)
{
item.Grade = vetMethod.VETGrade(item.Mark);
}
else if (ComboBoxGradeMethod.SelectedIndex == 1)
{
item.Grade = newVETMethod.VETGrade(item.Mark);
}
else if (ComboBoxGradeMethod.SelectedIndex == 2)
{
item.Grade = gradeMethod.CollegeGrade(item.Mark);
}
else
{
MessageBox.Show("Please select a grading scheme.");
}
}
在这个“for each”循环中有3条if语句。我的一位朋友说,我可以通过创建一个方法并将函数作为参数传递来减少代码
我是一个初级程序员,他说的话我现在有点听不懂。
我在想我该怎么做呢?
我不想要完整的答案,只想知道如何去做。一些建议
开关盒
而不是if-else
函数
UI控件
,您可以从UI控件(如ComboBoxGradeMethod
)获取变量的值,然后将其传递给函数。UI
将来可能会更改,因此最好将业务逻辑与UI
解耦假设
item.Mark
是int
而item.Grade
是string
那么我会这样做:
var gradeFromMarkMethods = new Dictionary<int, Func<int, string>>()
{
{ 0, vetMethod.VETGrade },
{ 1, newVETMethod.VETGrade },
{ 2, gradeMethod.CollegeGrade },
};
Func<int, string> gradeFromMark;
if (gradeFromMarkMethods.TryGetValue(ComboBoxGradeMethod.SelectedIndex, out gradeFromMark))
{
foreach (Student item in mark)
{
item.Grade = gradeFromMark(item.Mark);
}
}
else
{
MessageBox.Show("Please select a grading scheme.");
}
var gradeFromMarkMethods=new Dictionary()
{
{0,vetMethod.VETGrade},
{1,newVETMethod.VETGrade},
{2,gradeMethod.CollegeGrade},
};
Func评分标准;
if(gradeFromMarkMethods.TryGetValue(ComboBoxGradeMethod.SelectedIndex,out gradeFromMark))
{
foreach(标记中的学生项目)
{
item.Grade=gradeFromMark(item.Mark);
}
}
其他的
{
MessageBox.Show(“请选择评分方案”);
}
是否将其移动到某个方法取决于样式。但是,他会这样描述:public-void-grade(学生项目){}
。此方法将包含除foreach
之外的所有内容。然后将foreach重写为:foreach(标记中的学生项){AssignGrade(项);}
。我不认为这是一个很大的改进,除非您当前的方法很大。您可能应该将if
语句移出循环。目前,如果您不选择评分方案,您将收到许多消息框。@Tyress-谢谢。我很高兴你这么想。