首页 > 解决方案 > OrderBy 调用是否保证每个元素只调用一次 keySelector?

问题描述

他(已接受)关于同步排序的回复中,mm8提供了这段代码:

int index = 0;
list1 = list1.OrderBy(d => list2[index++]).ToList();

OrderBy代码很大程度上依赖于调用提供的事实keySelector

即使当前的实现实际上OrderBy是这样工作的,是否有任何保证?

我在OrderBy文档中没有找到任何线索。LINQ 指南中都没有。

编辑:显然,改变行为对于依赖它的代码(如 mm8 代码)来说是一个重大变化。我的问题更多的是:这种行为在提供时是否保证是不可变OrderBy的,或者它现在是既成事实

标签: c#linq

解决方案


根据源代码,它被调用一次。但它可以在未来改变 - 不保证:

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

推荐阅读