我有一个List<Person>
,而是要将其转换为简单加工到List<string>
,执行以下操作:
List<Person> persons = GetPersonsBySeatOrder();
List<string> seatNames = persons.Select(x => x.Name).ToList();
Console.WriteLine("First in line: {0}", seatNames[0]);
是在LINQ到对象的.Select()
Statement对象保证不改变列表成员的顺序?假设没有明确的不同/分组/排序添加
此外,如果一个任意.Where()
子句第一次使用时,它仍能保证保持相对顺序,或者它有时使用非迭代过滤?
正如上面费尔明评论,这基本上是一个重复的问题。我没上选择正确的关键词进行搜索计算器
在当前的.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);
}
}
它依赖于底层集合类型比什么都重要。你可以从一个HashSet得到不一致的排序,而是一个列表是安全的。即使你想执行的顺序是隐式地提供,这是更好,如果你需要它虽然定义明确排序。它看起来像你这样做的方法名称即判断。
是的,LINQ的Select
是保证返回它是通过枚举的顺序中的所有结果。最喜欢的LINQ的功能,它完全指定它做什么。除非错误的处理,这很可能会成为对Select
的代码:
IEnumerable<Y> Select<X, Y>(this IEnumerable<X> input, Func<X, Y> transform)
{
foreach (var x in input)
yield return transform(x);
}
但随着萨曼莎布拉纳姆指出,底层集合可能不具有内在的秩序。我已经看到了重新安排自己在读哈希表。