Список только для чтения или неизменяемый список in.NET 4.0


из того, что я могу сказать, .NET 4.0 по-прежнему не хватает списков только для чтения. Почему фреймворк все еще не имеет этой функциональности? Разве это не одна из самых распространенных функций для домен-управляемая конструкция?

одно из немногих преимуществ Java перед C# - это в виде коллекций.unmodifiablelist(список) метод, который, кажется, давно назрел в IListили List.

используя IEnumerable<T> Это самое простое решение вопроса - ToList может использоваться и возвращает копию.

6 82

6 ответов:

вы ищете ReadOnlyCollection, который был вокруг с. NET2.

IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);

или

List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();

Это создает только для чтения view, что отражает изменения, внесенные в обернутую коллекцию.

Как насчет ReadOnlyCollection уже в рамках?

Если наиболее распространенным шаблоном списка является итерация по всем элементам, IEnumerable или IQueryable также могут эффективно действовать как список только для чтения.

в 2.0 вы можете вызвать AsReadOnly, чтобы получить только для чтения версию списка. Или оберните существующий IList в объект ReadOnlyCollection.

Что с

для тех, кто любит использовать интерфейсы: .NET 4.5 добавляет общий IReadOnlyList интерфейс, который реализован List<T> например.

Это похоже на IReadOnlyCollection и Item свойство индексатора.