2016-04-28 7 views
3

У меня есть только два требования к структуре данных:Какую доступную для чтения, сохраняющую порядок коллекцию на C# следует использовать для поддержки перечисления?

  • быть только для чтения,
  • сохранить порядок (я хочу, чтобы перечислить их в определенном порядке, всегда).

Я знаю, что IReadOnlyList действительно сохраняет заказ. Я мог бы использовать его, но мне не нужно индексировать. Это означает, что я должен использовать IReadOnlyCollection. К сожалению, я не могу найти информацию о том, что она сохраняет порядок.

Знаете ли вы, неважно?

+0

https://msdn.microsoft.com/en-us/library/ms132474%28v=vs.110%29.aspx –

+0

Почему вы не можете использовать 'IEnumerable '? Это конкретные коллекции, которые делают гарантии при заказе. – Lee

+0

@roryap Упоминается, что это оболочка вокруг 'IList'. Я не уверен, что это эквивалентно тому, что он сохраняет порядок ... –

ответ

0

Для наличия списка только для чтения вы можете следовать различным подходам.

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. Это из-за методов расширения. Тем не менее порядок в экземпляре списка сохраняется, но вы можете требовать. Это не означает, что исходный список был затронут или изменен.