Conversione del tipo di dati
Aggiornamento: novembre 2007
I metodi di conversione modificano il tipo degli oggetti di input.
Operazioni di conversione nelle query LINQ sono utili in varie applicazioni. Di seguito vengono forniti alcuni esempi:
Il metodo Enumerable.AsEnumerable<TSource> può essere utilizzato per nascondere l'implementazione personalizzata di un tipo di un operatore di query standard.
Il metodo Enumerable.OfType<TResult> può essere utilizzato per consentire l'esecuzione di query LINQ sugli insiemi senza parametri.
I metodi Enumerable.ToArray<TSource>, Enumerable.ToDictionary, Enumerable.ToList<TSource> e Enumerable.ToLookup possono essere utilizzati per forzare l'esecuzione immediata di una query anziché rinviarla finché la query non viene enumerata.
Metodi
Nella tabella riportata di seguito vengono elencati i metodi degli operatori di query standard che eseguono le conversioni dei tipi di dati.
I metodi di conversione presenti in questa tabella i cui nomi iniziano con "As" modificano il tipo statico dell'insieme di origine ma non lo enumerano. I metodi i cui nomi iniziano con "To" enumerano l'insieme di origine e inseriscono gli elementi nel tipo di insieme corrispondente.
Nome metodo |
Descrizione |
Sintassi dell'espressione di query in C# |
Sintassi dell'espressione di query in Visual Basic |
Ulteriori informazioni |
---|---|---|---|---|
AsEnumerable |
Restituisce l'input tipizzato come IEnumerable<T>. |
Non applicabile. |
Non applicabile. |
|
AsQueryable |
Converte un oggetto IEnumerable generico in un oggetto IQueryable generico. |
Non applicabile. |
Non applicabile. |
|
Cast |
Esegue il cast degli elementi di un insieme su un tipo specifico. |
Utilizzare una variabile di intervallo tipizzata in modo esplicito. Ad esempio: from string str in words |
From … As … |
|
OfType |
Filtra i valori, a seconda della possibilità di eseguire il cast su un tipo specifico. |
Non applicabile. |
Non applicabile. |
|
ToArray |
Converte un insieme in una matrice. Questo metodo forza l'esecuzione della query. |
Non applicabile. |
Non applicabile. |
|
ToDictionary |
Inserisce gli elementi in un oggetto Dictionary<TKey, TValue> in base a una funzione del selettore principale. Questo metodo forza l'esecuzione della query. |
Non applicabile. |
Non applicabile. |
|
ToList |
Converte un insieme in un oggetto List<T>. Questo metodo forza l'esecuzione della query. |
Non applicabile. |
Non applicabile. |
|
ToLookup |
Inserisce gli elementi in un oggetto Lookup<TKey, TElement> (un dizionario uno a molti) in base a una funzione del selettore principale. Questo metodo forza l'esecuzione della query. |
Non applicabile. |
Non applicabile. |
Esempio di sintassi dell'espressione di query
Nell'esempio di codice seguente viene utilizzata una variabile di intervallo tipizzata in modo esplicito in C# o la clausola From As in Visual Basic per eseguire il cast di un tipo su un sottotipo prima di accedere a un membro disponibile solo nel sottotipo.
Class Plant
Public Name As String
End Class
Class CarnivorousPlant
Inherits Plant
Public TrapType As String
End Class
Sub Cast()
Dim plants() As Plant = { _
New CarnivorousPlant With {.Name = "Venus Fly Trap", .TrapType = "Snap Trap"}, _
New CarnivorousPlant With {.Name = "Pitcher Plant", .TrapType = "Pitfall Trap"}, _
New CarnivorousPlant With {.Name = "Sundew", .TrapType = "Flypaper Trap"}, _
New CarnivorousPlant With {.Name = "Waterwheel Plant", .TrapType = "Snap Trap"}}
Dim query = From plant As CarnivorousPlant In plants _
Where plant.TrapType = "Snap Trap" _
Select plant
Dim sb As New System.Text.StringBuilder()
For Each plant In query
sb.AppendLine(plant.Name)
Next
' Display the results.
MsgBox(sb.ToString())
' This code produces the following output:
' Venus Fly Trap
' Waterwheel Plant
End Sub
class Plant
{
public string Name { get; set; }
}
class CarnivorousPlant : Plant
{
public string TrapType { get; set; }
}
static void Cast()
{
Plant[] plants = new Plant[] {
new CarnivorousPlant { Name = "Venus Fly Trap", TrapType = "Snap Trap" },
new CarnivorousPlant { Name = "Pitcher Plant", TrapType = "Pitfall Trap" },
new CarnivorousPlant { Name = "Sundew", TrapType = "Flypaper Trap" },
new CarnivorousPlant { Name = "Waterwheel Plant", TrapType = "Snap Trap" }
};
var query = from CarnivorousPlant cPlant in plants
where cPlant.TrapType == "Snap Trap"
select cPlant;
foreach (Plant plant in query)
Console.WriteLine(plant.Name);
/* This code produces the following output:
Venus Fly Trap
Waterwheel Plant
*/
}
Ulteriori informazioni sulla conversione dei tipi di dati
Vedere anche
Concetti
Cenni preliminari sugli operatori di query standard
Espressioni query LINQ (Guida per programmatori C#)