LINQ to Objects是否保持其顺序

ars*_*in3 16 c# linq-to-objects

我有一个List<Person>,而是希望将它们转换为简单处理为a List<string>,执行以下操作:

List<Person> persons = GetPersonsBySeatOrder();
List<string> seatNames = persons.Select(x => x.Name).ToList();

Console.WriteLine("First in line: {0}", seatNames[0]);
Run Code Online (Sandbox Code Playgroud)

.Select()LINQ to Objects对象上的语句是否保证不会更改列表成员的顺序?假设没有添加明确的不同/分组/排序

另外,如果首先使用任意.Where()子句,是否仍保证保持相对顺序,或者有时使用非迭代过滤?


正如Fermin在上面评论的那样,这实际上是一个重复的问题.我没有选择正确的关键字来搜索stackoverflow

使用LINQ保留订单

小智 1

在当前的 .Net 实现中,它使用这样的代码。但不能保证将来会实施此实施。

private static IEnumerable<TResult> SelectIterator<TSource, TResult>(IEnumerable<TSource> source, Func<TSource, int, TResult> selector)
{
  int index = -1;
  foreach (TSource source1 in source)
  {
    checked { ++index; }
    yield return selector(source1, index);
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 我怀疑像 .Select() 这样广泛使用的方法的内部实现会被更改为以不同的顺序返回对象。 (2认同)