在循环中执行 LINQ 的 ThenBy 时遇到问题

having trouble performing LINQ's ThenBy inside a loop

我觉得这里出现了一些愚蠢的语法错误,但我终究无法弄清楚。我正在尝试使用多个属性对一个大列表进行排序。

方法一:

IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);

orderedList = orderedList.ThenByDescending(e => e.Priority[0].Value);
orderedList = orderedList.ThenByDescending(e => e.Priority[1].Value);
orderedList = orderedList.ThenByDescending(e => e.Priority[2].Value);

orderedList = orderedList.ThenByDescending(e => e.Score);

方法二:

IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);

for (int i = 0; i < 3; i++)
{
    orderedList = orderedList.ThenByDescending(e => e.Priority[i].Value);
}

orderedList = orderedList.ThenByDescending(e => e.Score);

上述方法 A 完美运行,但方法 B(我需要这样做的方式)不断返回索引超出范围错误,即使它应该完全相同(即 0、1、2)

在这两种情况下,e.Priority 表示 3 个键值对的列表。我不明白为什么方法 B 会返回超出范围的错误。

呵呵,循环的经典问题。正确做法:

IOrderedEnumerable<myClass> orderedList = myList.OrderByDescending(e => e.Tier);

for (int i = 0; i < 3; i++)
{
    int capturedIndex = i;
    orderedList = orderedList.ThenByDescending(e => e.Priority[capturedIndex].Value);
}

orderedList = orderedList.ThenByDescending(e => e.Score);

更多信息:Captured variable in a loop in C#