Насколько я могу судить, в .NET 4.0 по-прежнему отсутствуют списки, доступные только для чтения. Почему во фреймворке до сих пор отсутствует эта функциональность? Разве это не одна из самых распространенных функциональных возможностей предметно-ориентированного дизайна ?
Одним из немногих преимуществ Java перед C # является то , что он представлен в форме метода Collections.unmodifiablelist (list) , который, похоже, давно назрел в IList <T> или List <T>.
Использование IEnumerable<T>
- самый простой ToList
вариант решения вопроса - можно использовать и вернуть копию.
c#
java
.net
readonly-collection
Крис С
источник
источник
List<T>
для чтения - это написать свой собственный, я не знаю встроенного класса, который поддерживает все готовые функции «только для чтения»List<T>
, такие какContains
запросы LINQ и т. Д.Ответы:
Вы ищете
ReadOnlyCollection
, который существует со времен .NET2.или
Это создает доступное только для чтения представление , которое отражает изменения, внесенные в обернутую коллекцию.
источник
Для тех, кто любит использовать интерфейсы: .NET 4.5 добавляет общий
IReadOnlyList
интерфейс, который,List<T>
например, реализован .Он похож на свойство индексатора
IReadOnlyCollection
и добавляет егоItem
.источник
Как насчет ReadOnlyCollection уже в рамках?
источник
Если наиболее распространенным шаблоном списка является перебор всех элементов
IEnumerable<T>
или он такжеIQueryable<T>
может эффективно действовать как список только для чтения.источник
ToList()
, только копиюIEnumerable
это не полный набор методов «только для чтения», например, он не содержит таких методов, какContains
.В 2.0 вы можете позвонить,
AsReadOnly
чтобы получить версию списка только для чтения. Или оберните существующееIList
вReadOnlyCollection<T>
объект.источник
Что не так с System.Collections.ObjectModel.ReadOnlyCollection ?
источник