【发布时间】:2009-09-23 13:35:53
【问题描述】:
我可以假设我从IList 获得的IEnumerator(通过从IEnumerable 接口调用GetEnumerator 方法)将按列表顺序为我提供项目?
【问题讨论】:
标签: c# list ienumerable ienumerator
我可以假设我从IList 获得的IEnumerator(通过从IEnumerable 接口调用GetEnumerator 方法)将按列表顺序为我提供项目?
【问题讨论】:
标签: c# list ienumerable ienumerator
你不能,因为 IList 是一个接口,而实现可以以任何顺序枚举项目。例如,我可以实现 WeirdList : IList,并让它以任何方式枚举项目,包括非确定性的。另一方面,如果您使用 List(T),它保证按照它们在列表中存储的顺序枚举项目。
编辑:话虽如此,正如许多其他人指出的那样,大多数实现将遵循 List(T) 的语义。虽然那不是你问的;)
【讨论】:
枚举器应该允许您访问列表中相对于它们在内存中的位置的对象,这与在 for 循环中使用从 0 到 Length
编辑:我特别回答了实现 IList 的 .NET 框架类,如果任何其他人实现这些接口,他们的实际实现几乎可以是任何东西。所以这取决于实施者。
【讨论】:
是的,至少对于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。
【讨论】:
这将取决于 IList 的实现
【讨论】: