c# - OrderBy 调用是否保证每个元素只调用一次 keySelector?
问题描述
int index = 0;
list1 = list1.OrderBy(d => list2[index++]).ToList();
OrderBy
代码很大程度上依赖于调用提供的事实keySelector
:
- 以原始序列顺序的参数
- 每个元素只有一次
即使当前的实现实际上OrderBy
是这样工作的,是否有任何保证?
我在OrderBy
文档中没有找到任何线索。LINQ 指南中都没有。
编辑:显然,改变行为对于依赖它的代码(如 mm8 代码)来说是一个重大变化。我的问题更多的是:这种行为在提供时是否保证是不可变OrderBy
的,或者它现在是既成事实?
解决方案
根据源代码,它被调用一次。但它可以在未来改变 - 不保证:
internal override void ComputeKeys(TElement[] elements, int count)
{
keys = new TKey[count];
for (int i = 0; i < count; i++) keys[i] = keySelector(elements[i]);
if (next != null) next.ComputeKeys(elements, count);
}
推荐阅读
- java - 在 lamda 表达式中处理异常
- java - JPA JoinTable 不断添加不同的
- html - 始终为所有屏幕尺寸(移动和桌面)保留页面底部的页脚
- android - 在 ListView 上添加项目(简单?)
- excel - 使用列标题在新列中显示一列数据
- spring - @Configuration 是强制性的吗?
- java - 尝试将 Json 存储在 DB 中时,Ebean 'No service implementation found for SpiJsonService'
- php - Postgres 查询在“where”处或附近给出语法错误
- github - 使用 GitHub 使页面上线
- angular - 如何在 Angular 2+ 中基于组件创建模板?