Список только для чтения или немодифицируемый список в .NET 4.0
Из того, что я могу сказать,.NET 4.0 все еще не хватает списков только для чтения. Почему в инфраструктуре по-прежнему не хватает этой функциональности? Разве это не одна из наиболее распространенных функций для доменного дизайна?
Одно из немногих преимуществ, которые Java имеет над С#, это в виде метода Collections.unmodifiablelist(list), который, по-видимому, долго просроченные в IList <T> или List <T> .
Использование IEnumerable<T>
- это самое простое решение вопроса - ToList
можно использовать и возвращает копию.
Ответы
Ответ 1
Вы ищете ReadOnlyCollection
, который существует с .NET2.
IList<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = new ReadOnlyCollection<string>(foo);
или
List<string> foo = ...;
// ...
ReadOnlyCollection<string> bar = foo.AsReadOnly();
Это создает представление только для чтения, которое отражает изменения, внесенные в обернутую коллекцию.
Ответ 2
Как насчет ReadOnlyCollection уже в рамках?
Ответ 3
Если наиболее распространенным шаблоном списка является итерация по всем элементам, IEnumerable или IQueryable могут эффективно действовать как список только для чтения.
Ответ 4
В 2.0 вы можете вызвать AsReadOnly, чтобы получить версию списка только для чтения. Или заверните существующий IList в объект ReadOnlyCollection.
Ответ 5
Что случилось с System.Collections.ObjectModel.ReadOnlyCollection?
Ответ 6
Для тех, кто любит использовать интерфейсы:
.NET 4.5 добавляет общий IReadOnlyList
интерфейс, который реализуется, например, List<T>
.
Он похож на IReadOnlyCollection
и добавляет свойство индексатора Item
.