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

Как преобразовать список <string> в ReadOnlyCollection <string> в С#

Я хочу преобразовать элементы, введенные в список строк, чтобы:

System.Collections.ObjectModel.ReadOnlyCollection<string>

Я попытался использовать:

(System.Collections.ObjectModel.ReadOnlyCollection<string>)listname

Но он возвращает ошибку.

4b9b3361

Ответ 1

Вы можете создать новый экземпляр, используя существующий список в конструкторе.

var readOnlyList = new ReadOnlyCollection<string>(existingList);

ReadOnlyCollection (Of T) Конструктор в MSDN

Ответ 2

Если у вас есть:

List<string> names=new List<string>(){"Rod", "Jane", "Freddy"};

Затем вы можете сказать:

ReadOnlyCollection<string> readOnlyNames=names.AsReadOnly();

Это не копирует список. Вместо этого сборка readonly хранит ссылку на исходный список и запрещает ее изменение. Однако, если вы измените базовый список через names, тогда также изменится readOnlyNames, поэтому лучше всего отбросить записываемый экземпляр, если сможете.

Ответ 3

var readonlyCollection = new ReadOnlyCollection<string>(list);

Ответ 5

Другие ответы верны в том, что вам нужно передать IList<T> в конструктор ReadOnlyCollection<T>.

Мне полезно иметь метод расширения на IEnumerable<T>, который облегчает создание ReadOnlyCollection<T>:

public static ReadOnlyCollection<T> ToReadOnlyCollection<T>(
    this IEnumerable<T> source)
{
    if (source == null) throw new ArgumentNullException("source");

    return new ReadOnlyCollection<T>(
        source as IList<T> ?? source.ToList());
}