.Net IList的IEnumerator是否提供列表的顺序?

时间:2009-09-23 13:35:54

标签: c# list ienumerable ienumerator

我可以假设IEnumeratorIList(通过调用GetEnumerator界面中的IEnumerable方法)得到的{{1}}将按顺序提供给我的项目清单?

4 个答案:

答案 0 :(得分:8)

您不能,因为IList是一个接口,并且实现可以按任何顺序枚举项目。例如,我可以实现WeirdList:IList,并以任何方式枚举项目,包括非确定性。另一方面,如果使用List(T),它可以保证按照它们存储在列表中的顺序枚举项目。

编辑:正如许多其他人所指出的那样,大多数实现都将遵循List(T)的语义。虽然那不是你问的;)

答案 1 :(得分:0)

是的,至少对于任何体面的IList实施,它都会这样做。一个好的IList应该始终按照列表索引的顺序枚举其元素。

List<int> list = new List<int> { 1, 1, 2, 3, 5, 8 };

IEnumerator<int> enumtor = list.GetEnumerator();
while (enumtor.MoveNext())
{
    Console.Write(enumtor.Current);
}

打印112358

答案 2 :(得分:0)

枚举器应该允许您访问列表中相对于它们在内存中的位置的对象,这与使用从0到Length&lt;的列表的索引器相同。 1 for a for循环。

编辑:我特别回答了实现IList的.NET框架类,如果任何其他人实现这些接口,他们的实际实现可能就是任何事情。所以它取决于实施者。

答案 3 :(得分:-1)

这取决于IList的实现