Enumerable.Cast<TResult>(IEnumerable) Metodo

Definizione

Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato.

public:
generic <typename TResult>
[System::Runtime::CompilerServices::Extension]
 static System::Collections::Generic::IEnumerable<TResult> ^ Cast(System::Collections::IEnumerable ^ source);
public static System.Collections.Generic.IEnumerable<TResult> Cast<TResult> (this System.Collections.IEnumerable source);
static member Cast : System.Collections.IEnumerable -> seq<'Result>
<Extension()>
Public Function Cast(Of TResult) (source As IEnumerable) As IEnumerable(Of TResult)

Parametri di tipo

TResult

Tipo su cui eseguire il cast degli elementi di source.

Parametri

source
IEnumerable

Oggetto IEnumerable che contiene gli elementi da convertire in tipo TResult.

Restituisce

IEnumerable<TResult>

Oggetto IEnumerable<T> che contiene ogni elemento della sequenza di origine che ha eseguito il cast al tipo specificato.

Eccezioni

source è null.

Non è possibile eseguire il cast di un elemento della sequenza al tipo TResult.

Esempio

Nell'esempio di codice seguente viene illustrato come usare Cast<TResult>(IEnumerable) per abilitare l'uso degli operatori di query standard in un oggetto ArrayList.

System.Collections.ArrayList fruits = new System.Collections.ArrayList();
fruits.Add("mango");
fruits.Add("apple");
fruits.Add("lemon");

IEnumerable<string> query =
    fruits.Cast<string>().OrderBy(fruit => fruit).Select(fruit => fruit);

// The following code, without the cast, doesn't compile.
//IEnumerable<string> query1 =
//    fruits.OrderBy(fruit => fruit).Select(fruit => fruit);

foreach (string fruit in query)
{
    Console.WriteLine(fruit);
}

// This code produces the following output:
//
// apple
// lemon
// mango
' Create an ArrayList and add items to it.
Dim fruits As New System.Collections.ArrayList()
fruits.Add("mango")
fruits.Add("apple")
fruits.Add("lemon")

' Call Cast(Of String) to cast the ArrayList elements to strings.
Dim query As IEnumerable(Of String) =
fruits.Cast(Of String)().OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

'' The following code, without the cast, doesn't compile.
'Dim query As IEnumerable(Of String) = _
'    fruits.OrderBy(Function(fruit) fruit).Select(Function(fruit) fruit)

Dim output As New System.Text.StringBuilder
For Each fruit As String In query
    output.AppendLine(fruit)
Next

' Display the output.
Console.WriteLine(output.ToString())

' This code produces the following output:
'
' apple
' lemon
' mango

Commenti

Questo metodo viene implementato usando l'esecuzione posticipata. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione. La query rappresentata da questo metodo non viene eseguita fino a quando l'oggetto non viene enumerato chiamando direttamente il relativo GetEnumerator metodo o usando foreach in C# o For Each in Visual Basic.

Il Cast<TResult>(IEnumerable) metodo consente agli operatori di query standard di essere richiamati in raccolte non generiche fornendo le informazioni sul tipo necessarie. Ad esempio, ArrayList non implementa IEnumerable<T>, ma chiamando Cast<TResult>(IEnumerable) sull'oggetto ArrayList , gli operatori di query standard possono quindi essere usati per eseguire una query sulla sequenza.

Se un elemento non può essere convertito in tipo TResult, questo metodo genera un'eccezione InvalidCastException.

La sequenza di origine per questo metodo è IEnumerable, ovvero gli elementi hanno il tipo statico in fase di compilazione di object. Le uniche conversioni di tipo eseguite da questo metodo sono conversioni di riferimento e conversioni unboxing. Il tipo di runtime degli elementi nella raccolta deve corrispondere al tipo di destinazione oppure, nel caso dei tipi valore, il tipo di runtime degli elementi deve essere il risultato di una conversione boxing del tipo di destinazione. Altri tipi di conversione, ad esempio quelli tra tipi numerici diversi, non sono consentiti.

Per ottenere solo gli elementi che possono essere convertiti in tipo TResult, usare il OfType metodo anziché Cast<TResult>(IEnumerable).

In un'espressione di query, una variabile di iterazione tipizzata in modo esplicito viene convertita in una chiamata di Cast<TResult>(IEnumerable). In questo esempio viene illustrata la sintassi per una variabile di intervallo tipizzata in modo esplicito.

from int i in objects
From i As Integer In objects

Usare la select clausola di una query per eseguire altri tipi di conversione, ad esempio le conversioni numeriche implicite. Nell'esempio seguente vengono utilizzati sia il Cast metodo che un'istruzione select per convertire una sequenza di interi boxed in una sequenza di double.

IEnumerable sequence = Enumerable.Range(0, 10);
var doubles = from int item in sequence
                select (double)item;
Dim sequence As IEnumerable = Enumerable.Range(0, 10)
Dim doubles = From item As Integer In sequence
                Select CType(item, Double)

Si applica a

Vedi anche