Вопрос

Могу ли я предположить, что IEnumerator я получаю от IList (позвонив в GetEnumerator метод из IEnumerable интерфейс) предоставит мне элементы в порядке списка?

Это было полезно?

Решение

Это невозможно, поскольку IList — это интерфейс, а реализация может перечислять элементы в любом порядке.Например, я мог бы реализовать WeirdList:IList и заставить его перечислять элементы любым способом, в том числе недетерминированным.С другой стороны, если вы используете List(T), он гарантирует перечисление элементов в том порядке, в котором они хранятся в списке.

Редактировать:При этом, как отмечают многие другие, большинство реализаций будут следовать семантике List(T).Хотя вы не об этом спрашивали ;)

Другие советы

Перечислитель должен предоставлять вам доступ к объектам внутри списка относительно их положения в памяти, что будет то же самое, что использование индексатора списка от 0 до длины <1 в цикле for.

Редактировать: Я ответил конкретно в отношении классов .NET Framework, которые реализуют IList. Если кто-то другой реализует эти интерфейсы, их фактическая реализация может быть чем угодно.Так что это зависит от исполнителя.

Да, именно это и будет сделано для любой достойной реализации 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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top