如何减少if语句冗余

时间:2019-10-03 00:04:03

标签: c# if-statement refactoring

我是C#的新手,并且制作了一个简单的成绩计算器作为学习的方式。 我有6个文本框供用户输入数字,然后字母等级将显示在其旁边。一切正常,但是似乎很多余,因为我要转换6个等级,而每个陈述只有5个if语句只显示字母,然后再给一个平均分数表示

我认为有一种方法可以减少这种冗余

if (grade1 >= 80)
{
    labelGrade1.Text = "A";
}
else if (grade1 >= 70 && grade1 <= 79)
{
    labelGrade1.Text = "B";
}

if (grade2 >= 80)
{
    labelGrade2.Text = "A";
}
else if (grade2 >= 70 && grade2 <= 79)
{
    labelGrade2.Text = "B";
}

3 个答案:

答案 0 :(得分:3)

创建一个封装重复代码的方法:

 string LetterFromGrade(int grade)
 {
     if (grade > 79) return "A";
     if (grade > 69) return "B";
     ...
 }

然后在各处使用该方法。

 labelGrade1.Text = LetterFromGrade(grade1);
 labelGrade2.Text = LetterFromGrade(grade2);
 ...

答案 1 :(得分:0)

您可以像这样重构代码:

Action<int, Label> updateLabel = (value, label) =>
{
  if ( value >= 80 )
    label.Text = "A";
  else
  if ( value >= 70 )
    label.Text = "B";
};

updateLabel (grade1, labelGrade1);
updateLabel (grade2, labelGrade2);

更好的气味。

您当然可以创建一个类方法,而不是创建一个本地方法,但是如果仅在一个方法中使用它,则本地方法会更好,因为一个类方法允许其他代码调用它,而该代码不适合他们使用。

About delegate operator and anonymous methods

答案 2 :(得分:-6)

请参见下面的冗余代码:

您无法避免某些if语句。它们是必需的。

Shows redundant code

其他详细信息

我只能回答所问的问题。有很多冗余代码,所以我删除了它!我怎么知道这是OP的错字?话虽如此,我不会很快删除2-3个if语句。 5-6如果声明,则为是。最后,再次审查了该问题后,伊恩·默瑟(Ian Mercer)的回答看起来不错,也不太复杂。但是它假定每种等级的等级比例都是相同的。