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

问题描述 投票:0回答:4

我可以假设我从IEnumerator获得的IList(通过从GetEnumerator界面调用IEnumerable方法)将按照列表的顺序给我项目吗?

c# list ienumerable ienumerator
4个回答
8
投票

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

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


0
投票

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

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


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


-1
投票

这将取决于IList的实现

© www.soinside.com 2019 - 2024. All rights reserved.