2009-09-23 4 views

ответ

8

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

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

+1

+1 Большинство реализаций будут похожи, но было бы ошибкой писать код на основе этого факта. –

+0

Я бы предостерег от кода, который пытается проверить семантику структур данных, которые имеют довольно жесткую и быструю семантику. Это нормально для ваших модульных тестов, чтобы убедиться, что MyListImpl соответствует тому, что подразумевает IList, но фактический производственный код не должен иметь этих проверок. – user7116

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.

+0

Существует в настоящее время способ гарантировать, что человек, который реализовал IList следовал этому принципу, есть некоторые примеры, в которых было бы целесообразно, чтобы не возвращать его в порядке. –

+1

Нет гарантии, но это общепринятое предположение, и это * предположительно * является допустимым предположением. – Joren

+0

Я согласен, что это должно быть правильное предположение, но опыт в том, что программисты иногда делают сумасшедшие вещи в своем коде :) –

0

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

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

0

Это будет зависеть от реализации IList

 Смежные вопросы

  • Нет связанных вопросов^_^