Предоставляет ли List <T>, что элементы будут возвращены в том порядке, в котором они были добавлены?
Всегда ли List<T>
гарантирует, что элементы будут возвращены в том порядке, в котором они были добавлены при перечислении?
Обновлено: Спасибо за ответы на все ответы, успокаивает мой разум. Я быстро пошутил вокруг класса List<T>
с .NET Reflector (возможно, должен был сделать это в первую очередь), и, действительно, основной массив представляет собой массив T
(T[]
).
Ответы
Ответ 1
Список основан на индексе, и новые элементы всегда будут добавлены в конец списка. Вы можете вставлять элементы с определенным индексом, чтобы следующие элементы перемещали одну позицию.
Итак да, вы можете безопасно использовать этот способ...
Класс List (T) является общим эквивалент класса ArrayList. Это реализует общий IList (T) интерфейс с использованием массива, размер которого равен динамически увеличиваются по мере необходимости.
Элементы в этой коллекции могут быть доступ с использованием целочисленного индекса. Индексы в этой коллекции нуля.
Список (T) не гарантирован отсортирован. Вы должны отсортировать список (T) перед выполнением операций (например, BinarySearch), которые требуют List (T) для сортировки.
Список (T) может поддерживать несколько считывателей одновременно, пока коллекция не модифицировано. Перечисление через коллекцию по существу не является потокобезопасным процедура. В редком случае, когда перечисление связано с одним или несколькими доступа к записи, единственный способ обеспечить безопасность потока - это блокировка сбор в течение всего перечисление. Чтобы обеспечить сбор для доступа к нескольким потокам для чтении и письме, вы должны выполнить собственную синхронизацию.
Подробнее об этом можно узнать на MSDN.
Ответ 2
Да, List<T>
гарантирует порядок вставки и порядок поиска, и это задокументировано в MSDN (выделение ниже мой).
Вставка
List<T>.Add
Метод
Добавляет объект в конец List<T>
.
Параметр параметра:
Объект, который будет добавлен в конец List<T>
.
List<T>.AddRange
Метод
Добавляет элементы указанной коллекции в конец List<T>
.
Параметр коллекции:
Коллекция, элементы которой должны быть добавлены в конец List<T>
.
индексирование
List<T>.Enumerator
Структура
Изначально перечислитель помещается перед первым элементом в коллекции. В этом положении Current
составляет undefined. Поэтому вы должны вызвать MoveNext
, чтобы перевести счетчик в первый элемент коллекции, прежде чем читать значение Current
.
Current
возвращает тот же объект, пока не будет вызван MoveNext
. MoveNext
устанавливает Current
в следующий элемент.
Ответ 3
Да. Но это не часть спецификации.
Ссылка: Класс списка
Ответ 4
Да в соответствии с этим Тема форума MSDN