Какую только для чтения и сохраняющую порядок коллекцию в C# я должен использовать для поддержки перечисления?
У меня есть только два требования к структуре данных:
- Быть только для чтения,
- Сохранить порядок (я хочу перечислять его в определенном порядке, всегда).
я знаю это IReadOnlyList
сохраняет порядок. Я мог бы использовать это, но мне не нужно индексировать. Это означает, что я должен использовать IReadOnlyCollection
, К сожалению, я не могу найти информацию, что это сохраняет порядок.
Вы знаете, если это так?
1 ответ
Для получения списка только для чтения вы можете использовать разные подходы.
List<string> list = new List<string>();
IReadOnlyList<string> roList = list;
var roList1 = new ReadOnlyList(list);
roList
а также roList1
оба только для чтения, но если вы знаете оригинальный тип roList
который List<string>
Вы можете разыграть его и изменить коллекцию. Таким образом, второй вариант является лучшим. Чтобы указать, также IEnumerable<string>
только для чтения, потому что не предоставляет никаких методов для изменения коллекции (если вы не приведете ее к исходному типу).
По второму вопросу можно сказать, что любой List<T>
сохраняет порядок. Если вы не хотите предоставлять способ запроса списка и использовать OrderBy
это невозможно при использовании классов, производных от IEnumerable
, Это из-за методов расширения. Тем не менее, порядок в экземпляре списка сохраняется, но вы можете запросить. Это не означает, что исходный список был затронут или изменен.