List<T>.AsReadOnly Метод

Определение

Возвращает для текущей коллекции оболочку ReadOnlyCollection<T>, доступную только для чтения.

C#
public System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly ();

Возвращаемое значение

Объект, который служит оболочкой, обеспечивающей доступность текущего списка List<T> только для чтения.

Примеры

В следующем примере демонстрируется AsReadOnly метод. Создается List<T> строка с емкостью 4, так как конечный размер списка, как известно, ровно 4. Список заполняется четырьмя строками, а AsReadOnly метод используется для получения реализации универсального интерфейса только IList<T> для чтения, который упаковывает исходный список.

Элемент исходного списка имеет значение "Coelophysis" с помощью Item[] свойства (индексатор в C#), а содержимое списка, доступного только для чтения, снова отображается, чтобы продемонстрировать, что это всего лишь оболочка для исходного списка.

C#
using System;
using System.Collections.Generic;

public class Example
{
    public static void Main()
    {
        List<string> dinosaurs = new List<string>(4);

        Console.WriteLine("\nCapacity: {0}", dinosaurs.Capacity);

        dinosaurs.Add("Tyrannosaurus");
        dinosaurs.Add("Amargasaurus");
        dinosaurs.Add("Mamenchisaurus");
        dinosaurs.Add("Deinonychus");

        Console.WriteLine();
        foreach(string s in dinosaurs)
        {
            Console.WriteLine(s);
        }

        Console.WriteLine("\nIList<string> roDinosaurs = dinosaurs.AsReadOnly()");
        IList<string> roDinosaurs = dinosaurs.AsReadOnly();

        Console.WriteLine("\nElements in the read-only IList:");
        foreach(string dinosaur in roDinosaurs)
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\ndinosaurs[2] = \"Coelophysis\"");
        dinosaurs[2] = "Coelophysis";

        Console.WriteLine("\nElements in the read-only IList:");
        foreach(string dinosaur in roDinosaurs)
        {
            Console.WriteLine(dinosaur);
        }
    }
}

/* This code example produces the following output:

Capacity: 4

Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus

IList<string> roDinosaurs = dinosaurs.AsReadOnly()

Elements in the read-only IList:
Tyrannosaurus
Amargasaurus
Mamenchisaurus
Deinonychus

dinosaurs[2] = "Coelophysis"

Elements in the read-only IList:
Tyrannosaurus
Amargasaurus
Coelophysis
Deinonychus
 */

Комментарии

Чтобы предотвратить любые изменения List<T> объекта, предоставляйте его только через эту оболочку. Объект ReadOnlyCollection<T> не предоставляет методы, которые изменяют коллекцию. Однако при внесении изменений в базовый List<T> объект коллекция только для чтения отражает эти изменения.

Этот метод является операцией O(1).

Применяется к

Продукт Версии
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7, 8, 9
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8, 4.8.1
.NET Standard 1.3, 1.4, 1.6, 2.0, 2.1
UWP 10.0