Подтвердить что ты не робот

Список только для чтения или немодифицируемый список в .NET 4.0

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

Одно из немногих преимуществ, которые Java имеет над С#, это в виде метода Collections.unmodifiablelist(list), который, по-видимому, долго просроченные в IList <T> или List <T> .

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

4b9b3361

Ответ 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.

Ответ 6

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

Он похож на IReadOnlyCollection и добавляет свойство индексатора Item.