bav*_*aza 10 c# ienumerable iorderedenumerable
在C#中,是否会Select()用于投影IOrderedEnumerableretain元素的元素顺序?
IEnumerable,而不是IOrderedEnumerable?foreach)?请注意,这个问题是不是重复这一个 -我只有一个Select()条款,没有Distinct().
编辑
是的,它是对象的LINQ.顺便说一句,如果我实际上在查询一些SQL DB,答案会有什么不同吗?
Ser*_*kiy 10
Select不改变元素顺序.它是一个流媒体运营商(MSDN),这意味着它按照源的顺序处理源元素,并逐个产生投影元素.
因此,如果您正在对有序源进行投影,则投影结果将保留源元素的顺序.
还有一件事 - 你可能想知道为什么结果没有实现IOrderedEnumerable<T>:
int[] items = { 2, 3, 1, 8, 5 };
IEnumerable<int> query = items.OrderBy(i => i).Select(i => i);
bool isOrdered = query is IOrderedEnumerable<int>; // false
Run Code Online (Sandbox Code Playgroud)
这是因为Select运算符返回新的迭代器对象(WhereSelectArrayIterator在本例中),它从源集合(OrderedEnumerable在本例中)逐个读取项目,投影项目,并返回投影.这个新的迭代器对象没有实现IOrderedEnumerable<T>接口,它只是简单的IEnumerable<T>.有序集合现在是迭代器的源,但不是迭代器本身.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |