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 Cast<TResult>(IEnumerable) utilizzare per abilitare l'utilizzo degli operatori di query standard in un ArrayList oggetto .

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 tramite 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 il relativo metodo direttamente o usando GetEnumerator foreach in Visual C# o in For Each Visual Basic.

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

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

La sequenza di origine per questo metodo è , ovvero gli elementi hanno il tipo statico in fase IEnumerable di compilazione . object Le uniche conversioni di tipi eseguite da questo metodo sono le conversioni di riferimento e le 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. Non sono consentiti altri tipi di conversione, ad esempio quelli tra tipi numerici diversi.

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

In un'espressione di query una variabile di iterazione tipizzazione in modo esplicito si traduce in una chiamata di Cast<TResult>(IEnumerable) . In questo esempio viene illustrata la sintassi per una variabile di intervallo tipizzazione 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 metodo che un'istruzione per convertire una sequenza di interi Cast select boxed in una sequenza di valori 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