c# - 在循环中执行 LINQ 的 ThenBy 时遇到问题
问题描述
我觉得这里发生了一些愚蠢的语法错误,但我一生都无法弄清楚。我正在尝试使用多个属性对一个大列表进行排序。
方法一:
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);
方法B:
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 个 KeyValuePairs 的列表。我不明白为什么方法 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);
更多内容:在 C# 中的循环中捕获变量
推荐阅读
- python - 适用于 Python 3.4.4 的 Jinja2 版本
- python - 如果 python pandas(或 numpy)中的条件求和
- python - 根据第一列对二维数组的行进行排序
- flutter - Flutter - 如何在两个小部件之间创建一条垂直线
- javascript - 通过对象属性过滤对象数组在 ReactJS 中不起作用
- sql-server - SSIS:将文本流 DT_TEXT 转换为 DT_WSTR
- html - CSS填充动画在空白处中断
- android - ViewModel onChanged 获取无限循环
- powershell - 如何使用 IISAdministration 模块设置 EnabledProtocols
- python - 无法从谷歌 colab 保存 tensorflow 模型