我正在写一个简单的程序来管理分数和成绩,我写了这个字典:
public static Dictionary<double, char> markToGrade = new Dictionary<double, char>
{
// upper bound for each grade
[40] = 'F',
[50] = 'E',
[60] = 'D',
[70] = 'C',
[80] = 'B',
[100] = 'A',
};
然后这个方法:
public static char DetermineGrade(double mark)
{
char grade = 'F'; // default
foreach (var pair in markToGrade)
{
if (mark < pair.Key)
break;
grade = pair.Value;
}
return grade;
}
我看了看,
grade = pair.Value;
是检查后赋值的,我以为这样会给我错误的结果,所以我改成了:
public static char DetermineGrade(double mark)
{
char grade = 'F'; // default
foreach (var pair in markToGrade)
{
grade = pair.Value;
if (mark < pair.Key)
break;
}
return grade;
}
有效。
虽然...第一个版本也有效?而且我不明白为什么或如何。它不应该,因为分配是在检查之后发生的,所以如果你提前退出循环,你不应该得到实际的成绩,而是上一个。这里究竟发生了什么?