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