加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 重构如果声明

发布时间:2020-12-15 23:31:12 所属栏目:百科 来源:网络整理
导读:我必须为我的C#编程评估创建一个评分系统,我正在尝试重构冗余代码. foreach (Student item in mark){ if (ComboBoxGradeMethod.SelectedIndex == 0) { item.Grade = vetMethod.VETGrade(item.Mark); } else if (ComboBoxGradeMethod.SelectedIndex == 1) { i
我必须为我的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.");
    }
}

这个’for each’循环中有3个if语句.我的一个朋友说我可以通过创建一个方法并将函数作为参数传递来减少代码.

我是一名初学程序员,他说的话目前有点超出我的意义.
我想知道我会怎么做呢?
我不想要整个答案,只是如何去做.

解决方法

假设item.Mark是一个int而item.Grade是一个字符串,那么我就是这样做的:

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.");
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读