0

我可以假设IEnumerator我从一个IList(通过从接口调用GetEnumerator方法IEnumerable)得到的项目会按列表的顺序给我吗?

4

4 回答 4

8

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

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

于 2009-09-23T13:39:19.350 回答
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

于 2009-09-23T13:38:51.480 回答
0

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

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

于 2009-09-23T13:39:34.723 回答
-1

这将取决于 IList 的实现

于 2009-09-23T13:40:18.327 回答