Enumerable.Cast<TResult>(IEnumerable) Metodo

Definizione

Esegue il cast degli elementi di un oggetto IEnumerable nel tipo specificato.Casts the elements of an IEnumerable to the specified type.

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.The type to cast the elements of source to.

Parametri

source
IEnumerable

Oggetto IEnumerable che contiene gli elementi da convertire in tipo TResult.The IEnumerable that contains the elements to be cast to type TResult.

Restituisce

IEnumerable<TResult>

Oggetto IEnumerable<T> che contiene ogni elemento della sequenza di origine che ha eseguito il cast al tipo specificato.An IEnumerable<T> that contains each element of the source sequence cast to the specified type.

Eccezioni

source è null.source is null.

Non è possibile eseguire il cast di un elemento della sequenza al tipo TResult.An element in the sequence cannot be cast to type TResult.

Esempi

Nell'esempio di codice riportato di seguito viene illustrato come utilizzare Cast<TResult>(IEnumerable) per consentire l'utilizzo degli operatori di query standard in un ArrayList.The following code example demonstrates how to use Cast<TResult>(IEnumerable) to enable the use of the standard query operators on an 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.
MsgBox(output.ToString())

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

Commenti

Questo metodo viene implementato tramite l'esecuzione posticipata.This method is implemented by using deferred execution. Il valore restituito immediato è un oggetto che archivia tutte le informazioni necessarie per eseguire l'azione.The immediate return value is an object that stores all the information that is required to perform the action. La query rappresentata da questo metodo non viene eseguita finché l'oggetto non viene enumerato chiamando il relativo metodo GetEnumerator direttamente o utilizzando foreach in Visual C# o For Each in Visual Basic.The query represented by this method is not executed until the object is enumerated either by calling its GetEnumerator method directly or by using foreach in Visual C# or For Each in Visual Basic.

Il metodo Cast<TResult>(IEnumerable) consente agli operatori di query standard di essere richiamati in raccolte non generiche fornendo le informazioni sul tipo necessarie.The Cast<TResult>(IEnumerable) method enables the standard query operators to be invoked on non-generic collections by supplying the necessary type information. Ad esempio, ArrayList non implementa IEnumerable<T>, ma chiamando Cast<TResult>(IEnumerable) nell'oggetto ArrayList, gli operatori di query standard possono quindi essere utilizzati per eseguire una query sulla sequenza.For example, ArrayList does not implement IEnumerable<T>, but by calling Cast<TResult>(IEnumerable) on the ArrayList object, the standard query operators can then be used to query the sequence.

Se un elemento non può essere convertito nel tipo TResult, questo metodo genera un'eccezione InvalidCastException.If an element cannot be converted to type TResult, this method throws a InvalidCastException.

La sequenza di origine per questo metodo è IEnumerable, il che significa che gli elementi hanno il tipo statico della fase di compilazione di object.The source sequence for this method is IEnumerable, which means the elements have the compile-time static type of object. Le conversioni di tipi che vengono eseguite da questo metodo sono le conversioni di riferimento e le conversioni unboxing.The only type conversions that are performed by this method are reference conversions and unboxing conversions. Il tipo di runtime degli elementi nella raccolta deve corrispondere al tipo di destinazione o, nel caso di tipi valore, il tipo di runtime degli elementi deve essere il risultato di una conversione boxing del tipo di destinazione.The runtime type of the elements in the collection must match the target type, or in the case of value types, the runtime type of elements must be the result of a boxing conversion of the target type. Non sono consentiti altri tipi di conversione, ad esempio quelli tra tipi numerici diversi.Other conversion types, such as those between different numeric types, are not allowed.

Per ottenere solo gli elementi che possono essere convertiti nel tipo TResult, usare il metodo OfType invece di Cast<TResult>(IEnumerable).To obtain only those elements that can be converted to type TResult, use the OfType method instead of 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 a query expression, an explicitly typed iteration variable translates to an invocation of Cast<TResult>(IEnumerable). In questo esempio viene illustrata la sintassi per una variabile di intervallo tipizzata in modo esplicito.This example shows the syntax for an explicitly typed range variable.

from int i in objects  
From i As Integer In objects  

Utilizzare la clausola select di una query per eseguire altri tipi di conversione, ad esempio le conversioni numeriche implicite.Use the select clause of a query to perform other conversion types, like the implicit numeric conversions. Nell'esempio seguente vengono usati sia il metodo Cast che un'istruzione select per convertire una sequenza di interi boxed in una sequenza di valori Double.The following example uses both the Cast method and a select statement to convert a sequence of boxed integers to a sequence of doubles.

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