ReadOnlyCollection<T> ReadOnlyCollection<T> ReadOnlyCollection<T> ReadOnlyCollection<T> Class

Definizione

Fornisce la classe base per una raccolta generica di sola lettura. Provides the base class for a generic read-only collection.

generic <typename T>
public ref class ReadOnlyCollection : System::Collections::Generic::ICollection<T>, System::Collections::Generic::IEnumerable<T>, System::Collections::Generic::IList<T>, System::Collections::Generic::IReadOnlyCollection<T>, System::Collections::Generic::IReadOnlyList<T>, System::Collections::IList
[System.Runtime.InteropServices.ComVisible(false)]
[Serializable]
public class ReadOnlyCollection<T> : System.Collections.Generic.ICollection<T>, System.Collections.Generic.IEnumerable<T>, System.Collections.Generic.IList<T>, System.Collections.Generic.IReadOnlyCollection<T>, System.Collections.Generic.IReadOnlyList<T>, System.Collections.IList
type ReadOnlyCollection<'T> = class
    interface IList<'T>
    interface IList
    interface IReadOnlyList<'T>
    interface ICollection<'T>
    interface seq<'T>
    interface IEnumerable
    interface ICollection
    interface IReadOnlyCollection<'T>
Public Class ReadOnlyCollection(Of T)
Implements ICollection(Of T), IEnumerable(Of T), IList, IList(Of T), IReadOnlyCollection(Of T), IReadOnlyList(Of T)
Parametri di tipo
T

Tipo di elementi contenuti nella raccolta. The type of elements in the collection.

Ereditarietà
ReadOnlyCollection<T>ReadOnlyCollection<T>ReadOnlyCollection<T>ReadOnlyCollection<T>
Derivato
Attributi
ComVisibleAttribute SerializableAttribute
Implementazioni

Esempi

Esempio di codice seguente illustra vari membri del ReadOnlyCollection<T> classe.The following code example demonstrates several members of the ReadOnlyCollection<T> class. L'esempio di codice crea un List<T> di stringhe e aggiunge i nomi di quattro divorasse ad esso.The code example creates a List<T> of strings and adds four dinosaur names to it. L'esempio di codice viene quindi eseguito il wrapping l'elenco in un ReadOnlyCollection<T>.The code example then wraps the list in a ReadOnlyCollection<T>.

Dopo aver illustrato i Count, Contains, Item[Int32], e IList.IndexOf membri, l'esempio di codice mostra che il ReadOnlyCollection<T> è solo un wrapper per l'originale List<T> aggiungendo un nuovo elemento al List<T> e visualizzazione del contenuto del ReadOnlyCollection<T>.After demonstrating the Count, Contains, Item[Int32], and IList.IndexOf members, the code example shows that the ReadOnlyCollection<T> is just a wrapper for the original List<T> by adding a new item to the List<T> and displaying the contents of the ReadOnlyCollection<T>.

Infine, l'esempio di codice crea una matrice più grande dell'insieme e Usa il CopyTo metodo per inserire gli elementi della raccolta nella parte centrale della matrice.Finally, the code example creates an array larger than the collection and uses the CopyTo method to insert the elements of the collection into the middle of the array.

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

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

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

    ReadOnlyCollection<String^>^ readOnlyDinosaurs = 
        gcnew ReadOnlyCollection<String^>(dinosaurs);

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

    Console::WriteLine("\nCount: {0}", readOnlyDinosaurs->Count);

    Console::WriteLine("\nContains(\"Deinonychus\"): {0}", 
        readOnlyDinosaurs->Contains("Deinonychus"));

    Console::WriteLine("\nreadOnlyDinosaurs[3]: {0}", 
        readOnlyDinosaurs[3]);

    Console::WriteLine("\nIndexOf(\"Compsognathus\"): {0}", 
        readOnlyDinosaurs->IndexOf("Compsognathus"));

    Console::WriteLine("\nInsert into the wrapped List:");
    Console::WriteLine("Insert(2, \"Oviraptor\")");
    dinosaurs->Insert(2, "Oviraptor");

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

    array<String^>^ dinoArray = 
        gcnew array<String^>(readOnlyDinosaurs->Count + 2);
    readOnlyDinosaurs->CopyTo(dinoArray, 1);

    Console::WriteLine("\nCopied array has {0} elements:", 
        dinoArray->Length);
    for each( String^ dinosaur in dinoArray )
    {
        Console::WriteLine("\"{0}\"", dinosaur);
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Deinonychus
Compsognathus

Count: 4

Contains("Deinonychus"): True

readOnlyDinosaurs[3]: Compsognathus

IndexOf("Compsognathus"): 3

Insert into the wrapped List:
Insert(2, "Oviraptor")

Tyrannosaurus
Amargasaurus
Oviraptor
Deinonychus
Compsognathus

Copied array has 7 elements:
""
"Tyrannosaurus"
"Amargasaurus"
"Oviraptor"
"Deinonychus"
"Compsognathus"
""
 */
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;

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

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

        ReadOnlyCollection<string> readOnlyDinosaurs = 
            new ReadOnlyCollection<string>(dinosaurs);

        Console.WriteLine();
        foreach( string dinosaur in readOnlyDinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        Console.WriteLine("\nCount: {0}", readOnlyDinosaurs.Count);

        Console.WriteLine("\nContains(\"Deinonychus\"): {0}", 
            readOnlyDinosaurs.Contains("Deinonychus"));

        Console.WriteLine("\nreadOnlyDinosaurs[3]: {0}", 
            readOnlyDinosaurs[3]);

        Console.WriteLine("\nIndexOf(\"Compsognathus\"): {0}", 
            readOnlyDinosaurs.IndexOf("Compsognathus"));

        Console.WriteLine("\nInsert into the wrapped List:");
        Console.WriteLine("Insert(2, \"Oviraptor\")");
        dinosaurs.Insert(2, "Oviraptor");

        Console.WriteLine();
        foreach( string dinosaur in readOnlyDinosaurs )
        {
            Console.WriteLine(dinosaur);
        }

        string[] dinoArray = new string[readOnlyDinosaurs.Count + 2];
        readOnlyDinosaurs.CopyTo(dinoArray, 1);

        Console.WriteLine("\nCopied array has {0} elements:", 
            dinoArray.Length);
        foreach( string dinosaur in dinoArray )
        {
            Console.WriteLine("\"{0}\"", dinosaur);
        }
    }
}

/* This code example produces the following output:

Tyrannosaurus
Amargasaurus
Deinonychus
Compsognathus

Count: 4

Contains("Deinonychus"): True

readOnlyDinosaurs[3]: Compsognathus

IndexOf("Compsognathus"): 3

Insert into the wrapped List:
Insert(2, "Oviraptor")

Tyrannosaurus
Amargasaurus
Oviraptor
Deinonychus
Compsognathus

Copied array has 7 elements:
""
"Tyrannosaurus"
"Amargasaurus"
"Oviraptor"
"Deinonychus"
"Compsognathus"
""
 */
Imports System
Imports System.Collections.Generic
Imports System.Collections.ObjectModel

Public Class Example

    Public Shared Sub Main()

        Dim dinosaurs As New List(Of String)

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

        Dim readOnlyDinosaurs As _
            New ReadOnlyCollection(Of String)(dinosaurs)

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

        Console.WriteLine(vbLf & "Count: {0}", _
            readOnlyDinosaurs.Count)

        Console.WriteLine(vbLf & "Contains(""Deinonychus""): {0}", _
            readOnlyDinosaurs.Contains("Deinonychus"))

        Console.WriteLine(vbLf & _
            "readOnlyDinosaurs(3): {0}", readOnlyDinosaurs(3))

        Console.WriteLine(vbLf & "IndexOf(""Compsognathus""): {0}", _
            readOnlyDinosaurs.IndexOf("Compsognathus"))

        Console.WriteLine(vbLf & "Insert into the wrapped List:")
        Console.WriteLine("Insert(2, ""Oviraptor"")")
        dinosaurs.Insert(2, "Oviraptor")

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

        Dim dinoArray(readOnlyDinosaurs.Count + 1) As String
        readOnlyDinosaurs.CopyTo(dinoArray, 1)

        Console.WriteLine(vbLf & "Copied array has {0} elements:", _
            dinoArray.Length)
        For Each dinosaur As String In dinoArray
            Console.WriteLine("""{0}""", dinosaur)
        Next

   End Sub
End Class

' This code example produces the following output:
'
'Tyrannosaurus
'Amargasaurus
'Deinonychus
'Compsognathus
'
'Count: 4
'
'Contains("Deinonychus"): True
'
'readOnlyDinosaurs(3): Compsognathus
'
'IndexOf("Compsognathus"): 3
'
'Insert into the wrapped List:
'Insert(2, "Oviraptor")
'
'Tyrannosaurus
'Amargasaurus
'Oviraptor
'Deinonychus
'Compsognathus
'
'Copied array has 7 elements:
'""
'"Tyrannosaurus"
'"Amargasaurus"
'"Oviraptor"
'"Deinonychus"
'"Compsognathus"
'""

Commenti

Un'istanza di ReadOnlyCollection<T> classe generica è sempre di sola lettura.An instance of the ReadOnlyCollection<T> generic class is always read-only. Una raccolta che è di sola lettura è semplicemente una raccolta con un wrapper che impedisce la modifica. Pertanto, se vengono apportate modifiche alla raccolta sottostante, la raccolta di sola lettura riflette le modifiche.A collection that is read-only is simply a collection with a wrapper that prevents modifying the collection; therefore, if changes are made to the underlying collection, the read-only collection reflects those changes. Vedere Collection<T> per una versione modificabile di questa classe.See Collection<T> for a modifiable version of this class.

Note per gli eredi

Questa classe di base viene fornita per renderne più semplice per gli implementatori creare una raccolta personalizzata generica sola lettura. This base class is provided to make it easier for implementers to create a generic read-only custom collection. Gli sviluppatori sono invitati a estendere questa classe di base anziché crearne di propri. Implementers are encouraged to extend this base class instead of creating their own.

Costruttori

ReadOnlyCollection<T>(IList<T>) ReadOnlyCollection<T>(IList<T>) ReadOnlyCollection<T>(IList<T>) ReadOnlyCollection<T>(IList<T>)

Consente di inizializzare una nuova istanza della classe ReadOnlyCollection<T> come wrapper in sola lettura per l'elenco specificato. Initializes a new instance of the ReadOnlyCollection<T> class that is a read-only wrapper around the specified list.

Proprietà

Count Count Count Count

Ottiene il numero di elementi contenuti nell'istanza di ReadOnlyCollection<T>. Gets the number of elements contained in the ReadOnlyCollection<T> instance.

Items Items Items Items

Restituisce l'interfaccia IList<T> inclusa nell'oggetto ReadOnlyCollection<T>. Returns the IList<T> that the ReadOnlyCollection<T> wraps.

Item[Int32] Item[Int32] Item[Int32] Item[Int32]

Ottiene l'elemento in corrispondenza dell'indice specificato. Gets the element at the specified index.

Metodi

Contains(T) Contains(T) Contains(T) Contains(T)

Determina se un elemento è incluso in ReadOnlyCollection<T>. Determines whether an element is in the ReadOnlyCollection<T>.

CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32) CopyTo(T[], Int32)

Copia l'intero oggetto ReadOnlyCollection<T> in un oggetto Array compatibile unidimensionale, a partire dall'indice specificato della matrice di destinazione. Copies the entire ReadOnlyCollection<T> to a compatible one-dimensional Array, starting at the specified index of the target array.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Determina se l'oggetto specificato è uguale all'oggetto corrente. Determines whether the specified object is equal to the current object.

(Inherited from Object)
GetEnumerator() GetEnumerator() GetEnumerator() GetEnumerator()

Restituisce un enumeratore che esegue l'iterazione di ReadOnlyCollection<T>. Returns an enumerator that iterates through the ReadOnlyCollection<T>.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Funge da funzione hash predefinita. Serves as the default hash function.

(Inherited from Object)
GetType() GetType() GetType() GetType()

Ottiene l'oggetto Type dell'istanza corrente. Gets the Type of the current instance.

(Inherited from Object)
IndexOf(T) IndexOf(T) IndexOf(T) IndexOf(T)

Cerca l'oggetto specificato e restituisce l'indice in base zero della prima occorrenza nell'intero oggetto ReadOnlyCollection<T>. Searches for the specified object and returns the zero-based index of the first occurrence within the entire ReadOnlyCollection<T>.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crea una copia superficiale dell'oggetto Object corrente. Creates a shallow copy of the current Object.

(Inherited from Object)
ToString() ToString() ToString() ToString()

Restituisce una stringa che rappresenta l'oggetto corrente. Returns a string that represents the current object.

(Inherited from Object)

Implementazioni dell'interfaccia esplicita

ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32) ICollection.CopyTo(Array, Int32)

Copia gli elementi di ICollection in Array a partire da un particolare indice Array. Copies the elements of the ICollection to an Array, starting at a particular Array index.

ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized ICollection.IsSynchronized

Ottiene un valore che indica se l'accesso a ICollection è sincronizzato (thread-safe). Gets a value indicating whether access to the ICollection is synchronized (thread safe).

ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot ICollection.SyncRoot

Ottiene un oggetto che può essere usato per sincronizzare l'accesso a ICollection. Gets an object that can be used to synchronize access to the ICollection.

ICollection<T>.Add(T) ICollection<T>.Add(T) ICollection<T>.Add(T) ICollection<T>.Add(T)

Aggiunge un elemento a ICollection<T>. Adds an item to the ICollection<T>. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

ICollection<T>.Clear() ICollection<T>.Clear() ICollection<T>.Clear() ICollection<T>.Clear()

Rimuove tutti gli elementi da ICollection<T>. Removes all items from the ICollection<T>. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

ICollection<T>.IsReadOnly ICollection<T>.IsReadOnly ICollection<T>.IsReadOnly ICollection<T>.IsReadOnly

Ottiene un valore che indica se ICollection<T> è di sola lettura. Gets a value indicating whether the ICollection<T> is read-only.

ICollection<T>.Remove(T) ICollection<T>.Remove(T) ICollection<T>.Remove(T) ICollection<T>.Remove(T)

Rimuove la prima occorrenza di un oggetto specifico da ICollection<T>. Removes the first occurrence of a specific object from the ICollection<T>. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator() IEnumerable.GetEnumerator()

Restituisce un enumeratore che consente di eseguire l'iterazione di una raccolta. Returns an enumerator that iterates through a collection.

IList.Add(Object) IList.Add(Object) IList.Add(Object) IList.Add(Object)

Aggiunge un elemento a IList. Adds an item to the IList. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList.Clear() IList.Clear() IList.Clear() IList.Clear()

Rimuove tutti gli elementi da IList. Removes all items from the IList. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList.Contains(Object) IList.Contains(Object) IList.Contains(Object) IList.Contains(Object)

Stabilisce se IList contiene un valore specifico. Determines whether the IList contains a specific value.

IList.IndexOf(Object) IList.IndexOf(Object) IList.IndexOf(Object) IList.IndexOf(Object)

Determina l'indice di un elemento specifico in IList. Determines the index of a specific item in the IList.

IList.Insert(Int32, Object) IList.Insert(Int32, Object) IList.Insert(Int32, Object) IList.Insert(Int32, Object)

Inserisce un elemento in IList in corrispondenza dell'indice specificato. Inserts an item to the IList at the specified index. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList.IsFixedSize IList.IsFixedSize IList.IsFixedSize IList.IsFixedSize

Ottiene un valore che indica se IList ha dimensioni fisse. Gets a value indicating whether the IList has a fixed size.

IList.IsReadOnly IList.IsReadOnly IList.IsReadOnly IList.IsReadOnly

Ottiene un valore che indica se IList è di sola lettura. Gets a value indicating whether the IList is read-only.

IList.Item[Int32] IList.Item[Int32] IList.Item[Int32] IList.Item[Int32]

Ottiene l'elemento in corrispondenza dell'indice specificato. Gets the element at the specified index. Si verifica un'eccezione NotSupportedException se si tenta di impostare l'elemento in corrispondenza dell'indice specificato. A NotSupportedException occurs if you try to set the item at the specified index.

IList.Remove(Object) IList.Remove(Object) IList.Remove(Object) IList.Remove(Object)

Rimuove la prima occorrenza di un oggetto specifico da IList. Removes the first occurrence of a specific object from the IList. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList.RemoveAt(Int32) IList.RemoveAt(Int32) IList.RemoveAt(Int32) IList.RemoveAt(Int32)

Rimuove l'elemento IList in corrispondenza dell'indice specificato. Removes the IList item at the specified index. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList<T>.Insert(Int32, T) IList<T>.Insert(Int32, T) IList<T>.Insert(Int32, T) IList<T>.Insert(Int32, T)

Inserisce un elemento in IList<T> in corrispondenza dell'indice specificato. Inserts an item to the IList<T> at the specified index. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

IList<T>.Item[Int32] IList<T>.Item[Int32] IList<T>.Item[Int32] IList<T>.Item[Int32]

Ottiene l'elemento in corrispondenza dell'indice specificato. Gets the element at the specified index. Si verifica un'eccezione NotSupportedException se si tenta di impostare l'elemento nell'indice specificato. An NotSupportedException occurs if you try to set the item at the specified index.

IList<T>.RemoveAt(Int32) IList<T>.RemoveAt(Int32) IList<T>.RemoveAt(Int32) IList<T>.RemoveAt(Int32)

Rimuove l'elemento IList<T> in corrispondenza dell'indice specificato. Removes the IList<T> item at the specified index. Questa implementazione genera sempre NotSupportedException. This implementation always throws NotSupportedException.

Si applica a

Thread safety

Statici pubblici (Shared in Visual Basic) membri di questo tipo sono thread-safe. Public static (Shared in Visual Basic) members of this type are thread safe. I membri di istanza non sono garantiti come thread-safe. Any instance members are not guaranteed to be thread safe. Oggetto ReadOnlyCollection<T> può supportare più lettori contemporaneamente, fino a quando non viene modificata la raccolta. A ReadOnlyCollection<T> can support multiple readers concurrently, as long as the collection is not modified. Anche in questo caso, l'enumerazione di una raccolta di per sé non è una procedura thread-safe. Even so, enumerating through a collection is intrinsically not a thread-safe procedure. Per assicurare la protezione del thread durante l'enumerazione, è possibile bloccare la raccolta durante l'intera enumerazione. To guarantee thread safety during enumeration, you can lock the collection during the entire enumeration. Per consentire l'accesso alla raccolta in lettura e scrittura da parte di più thread, è necessario implementare la propria sincronizzazione. To allow the collection to be accessed by multiple threads for reading and writing, you must implement your own synchronization.

Vedi anche