我必须为我的C#编程评估创建一个评分系统,而我目前正在尝试重构冗余代码。
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.");
}
}
这里的每个'循环是3 if语句。我的一个朋友说我可以通过创建方法并将函数作为参数传递来减少代码。
我是一名初学程序员,他说的话目前还有点超出我的意思。 我想知道我会怎么做呢? 我不想要整个答案,只是如何去做。
答案 0 :(得分:6)
假设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.");
}
答案 1 :(得分:1)
很少有建议。
尝试使用switch case
代替if - else
。
为成绩分配
function
尝试将UI controls
与代码分开,您可以从ComboBoxGradeMethod
等UI控件中获取变量的值,然后将其传递给函数。 UI
将来可能会发生变化,因此最好将业务逻辑与UI
分离。