我对 IEnumerable
中的order 有疑问。
据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:
while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}
现在,假设需要对一个已排序 集合进行操作。在这种情况下可以使用 IEnumerable 还是尝试具有索引支持的其他方式(即 IList
)更好?
换句话说:IEnumerable
的合约是否对一般顺序做出任何保证?
因此,IEnumerable
不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合? 只读集合
? 列表
?它们都包含Add()
方法(前者甚至没有实现)。
我自己的想法:IEnumerable
不提供有关排序的任何保证。正确的实现可以在不同的枚举中以不同的顺序返回相同的元素(考虑一个 SQL 查询)
我知道 LINQ First()
,但是如果 IEnumerable
只字不提它的顺序,那么这个扩展就没用了。
最佳答案
IEnumerable/IEnumerable<T>
不保证顺序,但使用 IEnumerable/IEnumerable<T>
的实现可能会或可能不会保证订购。
例如,如果您枚举 List<T>
,顺序是有保证的,但是如果你枚举 HashSet<T>
没有提供这样的保证,但两者都将使用 IEnumerable<T>
进行枚举。界面。
关于c# - IEnumerable 和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409893/