LINQ e tipi generici (C#)

Le query LINQ sono basate su tipi generici, introdotti nella versione 2.0 di .NET Framework. Non è richiesta una conoscenza approfondita dei generics prima di poter iniziare a scrivere le query. È tuttavia necessario comprendere due concetti di base:

  1. Quando si crea un'istanza di una classe di insiemi generici, ad esempio List<T>, sostituire "T" con il tipo di oggetti contenuti nell'elenco. Ad esempio, un elenco di stringhe viene espresso come List<string> e un elenco di oggetti Customer viene espresso come List<Customer>. Un elenco generico è fortemente tipizzato e fornisce molti vantaggi sugli insiemi che archiviano gli elementi come Object. Se si tenta di aggiungere un oggetto Customer a un oggetto List<string>, si otterrà un errore in fase di compilazione. È semplice utilizzare gli insiemi generici poiché non è necessario eseguire il cast dei tipi in fase di esecuzione.

  2. IEnumerable<T> è l'interfaccia che consente alle classi di insiemi generici di essere enumerate utilizzando l'istruzione foreach. Le classi di insiemi generici supportano IEnumerable<T> nello stesso modo in cui le classi di insiemi non generici come ArrayList supportano IEnumerable.

Per ulteriori informazioni sui generics, vedere Generics (Guida per programmatori C#).

Variabili IEnumerable<T> nelle query LINQ

Le variabili di query LINQ sono tipizzate come IEnumerable<T> o un tipo derivato ad esempio IQueryable<T>. Nel caso di una variabile di query tipizzata come IEnumerable<Customer>, significa semplicemente che la query, quando eseguita, genererà una sequenza di zero o più oggetti Customer.

IEnumerable<Customer> customerQuery =
    from cust in customers
    where cust.City == "London"
    select cust;

foreach (Customer customer in customerQuery)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

Per ulteriori informazioni, vedere Relazioni tra i tipi nelle operazioni di query LINQ (C#).

Gestione delle dichiarazioni di tipo generico tramite il compilatore

Se si preferisce, è possibile evitare la sintassi generica utilizzando la parola chiave var. La parola chiave var indica al compilatore di dedurre il tipo di una variabile di query esaminando l'origine dati specificata nella clausola from. Nell'esempio seguente viene generato lo stesso codice compilato dell'esempio precedente:

var customerQuery2 = 
    from cust in customers
    where cust.City == "London"
    select cust;

foreach(var customer in customerQuery2)
{
    Console.WriteLine(customer.LastName + ", " + customer.FirstName);
}

La parola chiave var è utile quando il tipo della variabile è ovvio o quando non è importante specificare in modo esplicito i tipi generici annidati, ad esempio quelli generati dalle query di gruppo. In generale, è consigliabile utilizzare var per rendere più difficile la lettura del codice da parte di altri utenti. Per ulteriori informazioni, vedere Variabili locali tipizzate in modo implicito (Guida per programmatori C#).

Vedere anche

Riferimenti

Generics (Guida per programmatori C#)

Altre risorse

Nozioni di base su LINQ in C#