List<T>.AsReadOnly Método

Definición

Devuelve un contenedor de ReadOnlyCollection<T> de solo lectura para la colección actual.

public:
 System::Collections::ObjectModel::ReadOnlyCollection<T> ^ AsReadOnly();
public System.Collections.ObjectModel.ReadOnlyCollection<T> AsReadOnly ();
member this.AsReadOnly : unit -> System.Collections.ObjectModel.ReadOnlyCollection<'T>
Public Function AsReadOnly () As ReadOnlyCollection(Of T)

Devoluciones

Objeto que actúa como contenedor de solo lectura para la List<T> actual.

Ejemplos

En el siguiente ejemplo se muestra el AsReadOnly método. Se List<T> crea una de cadenas con una capacidad de 4, ya que se sabe que el tamaño final de la lista es exactamente 4. La lista se rellena con cuatro cadenas y el AsReadOnly método se usa para obtener una implementación de interfaz genérica de solo IList<T> lectura que encapsula la lista original.

Un elemento de la lista original se establece en "Coelophysis" mediante la Item[] propiedad (el indexador en C#) y el contenido de la lista de solo lectura se muestra de nuevo para demostrar que es solo un contenedor para la lista original.

using namespace System;
using namespace System::Collections::Generic;

void main()
{
    List<String^>^ dinosaurs = gcnew List<String^>(4);

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

    dinosaurs->Add("Tyrannosaurus");
    dinosaurs->Add("Amargasaurus");
    dinosaurs->Add("Mamenchisaurus");
    dinosaurs->Add("Deinonychus");

    Console::WriteLine();
    for each(String^ dinosaur in dinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

    Console::WriteLine("\nIList<String^>^ roDinosaurs = dinosaurs->AsReadOnly()");
    IList<String^>^ roDinosaurs = dinosaurs->AsReadOnly();

    Console::WriteLine("\nElements in the read-only IList:");
    for each(String^ dinosaur in roDinosaurs)
    {
        Console::WriteLine(dinosaur);
    }

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

    Console::WriteLine("\nElements in the read-only IList:");
    for each(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
 */
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
 */
Imports System.Collections.Generic

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs As New List(Of String)(4)

        Console.WriteLine(vbLf & "Capacity: {0}", dinosaurs.Capacity)

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

        Console.WriteLine()
        For Each dinosaur As String In dinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & _
            "Dim roDinosaurs As IList(Of String) = dinosaurs.AsReadOnly")
        Dim roDinosaurs As IList(Of String) = dinosaurs.AsReadOnly

        Console.WriteLine(vbLf & "Elements in the read-only IList:")
        For Each dinosaur As String In roDinosaurs
            Console.WriteLine(dinosaur)
        Next

        Console.WriteLine(vbLf & "dinosaurs(2) = ""Coelophysis""")
        dinosaurs(2) = "Coelophysis"

        Console.WriteLine(vbLf & "Elements in the read-only IList:")
        For Each dinosaur As String In roDinosaurs
            Console.WriteLine(dinosaur)
        Next

    End Sub
End Class

' This code example produces the following output:
'
'Capacity: 4
'
'Tyrannosaurus
'Amargasaurus
'Mamenchisaurus
'Deinonychus
'
'Dim roDinosaurs As IList(Of String) = 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

Comentarios

Para evitar modificaciones en el List<T> objeto, explítela solo a través de este contenedor. Un ReadOnlyCollection<T> objeto no expone métodos que modifican la colección. Sin embargo, si se realizan cambios en el objeto subyacente List<T> , la colección de solo lectura refleja esos cambios.

Este método es una operación O(1).

Se aplica a