C# 字典键值对行为异常

问题描述 投票:0回答:0

我正在写一个简单的程序来管理分数和成绩,我写了这个字典:

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

有效。

虽然...第一个版本也有效?而且我不明白为什么或如何。它不应该,因为分配是在检查之后发生的,所以如果你提前退出循环,你不应该得到实际的成绩,而是上一个。这里究竟发生了什么?

c# loops dictionary foreach key-value
© www.soinside.com 2019 - 2024. All rights reserved.