我有一个关于订单的问题IEnumerable
。
据我所知,迭代 IEnumerable 是伪代码,可以用以下方式编写:
while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}
现在,假设需要对已排序的集合进行操作。在这种情况下可以使用 IEnumerable 还是尝试其他IList
具有索引支持的方法(即)更好?
换句话说:合同是否对IEnumerable
一般订单做出任何保证?
因此,IEnumerable
对于保证排序的通用接口来说,这不是一个适当的方法。新的问题是什么接口或类应该用于具有顺序的不可变集合?ReadonlyCollection
? IList
? 它们都包含Add()
方法(甚至在前一个中没有实现)。
我自己的想法:IEnumerable
不提供有关订购的任何保证。正确的实现可以在不同的枚举中以不同的顺序返回相同的元素(考虑 SQL 查询)
我知道 LINQ First()
,但如果IEnumerable
不说它的顺序,这个扩展是非常没用的。