首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >IOrderedEnumerable.Select()会保留元素顺序吗?

IOrderedEnumerable.Select()会保留元素顺序吗?
EN

Stack Overflow用户
提问于 2013-07-15 09:05:17
回答 1查看 2.2K关注 0票数 11

在C#中,使用Select()来投影IOrderedEnumerable元素是否会保留元素顺序?

  • 如果是的话,它为什么返回一个IEnumerable,而不是一个IOrderedEnumerable
  • 如果没有,我如何才能做到这一点(除了使用foreach)?

注意,这个问题不是这一个的重复--我只有一个Select()子句,没有Distinct()

编辑

是的,它是。顺便说一句,如果我实际上是在查询一些SQL,答案会有所不同吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-15 09:14:48

Select不更改元素顺序。它是一个流运营商(MSDN),这意味着它按源的顺序处理源元素,并逐个生成投影元素。

因此,如果您正在对有序源进行投影,则投影结果将保留源元素的顺序。

还有一件事--您可能想知道,为什么结果不实现IOrderedEnumerable<T>

代码语言:javascript
复制
int[] items = { 2, 3, 1, 8, 5 };
IEnumerable<int> query = items.OrderBy(i => i).Select(i => i);
bool isOrdered = query is IOrderedEnumerable<int>; // false

这是因为Select操作符返回新的迭代器对象(在本例中为WhereSelectArrayIterator),它逐个读取源集合中的项(本例中为OrderedEnumerable),项目项,并返回投影。这个新的迭代器对象不实现IOrderedEnumerable<T>接口,它只是简单的IEnumerable<T>。有序集合现在是迭代器的来源,而不是迭代器本身。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17650460

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档