Enumerable.Cast<TResult>(IEnumerable) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
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
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)