如何减少if语句冗余

How to reduce if statement redundancy

我是 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";
}

参见下面的冗余代码:

你无法避免一些 if 语句。他们是必要的。

更多详情

我只能回答问题。有很多冗余代码,所以我删除了它!我怎么知道这是OP的错字?话虽如此,我不会很快删除 2-3 个 if 语句。 5-6 if语句,则yes。最后,再次回顾了这个问题,Ian Mercer 的答案看起来不错而且不太复杂。但它假定每种等级的评分等级都相同。

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

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

然后到处使用那个方法。

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

您可以像这样重构您的代码:

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);

更好闻。

你当然可以创建一个 class 方法而不是本地方法,但如果它只在一个方法中使用,本地更好,因为 class 方法允许其他代码调用它,而这代码不适用于他们。

About delegate operator and anonymous methods