Procedura: utilizzare variabili e matrici locali tipizzate in modo implicito in un'espressione di query (Guida per programmatori C#)

È possibile utilizzare le variabili locali tipizzate in modo implicito ogni volta che si desidera determinare il tipo di una variabile locale tramite il compilatore.È necessario utilizzare variabili locali tipizzate in modo implicito per archiviare i tipi anonimi, che vengono spesso utilizzati nelle espressioni di query.Negli esempi seguenti vengono illustrati sia l'utilizzo facoltativo che quello obbligatorio delle variabili locali tipizzate in modo implicito nelle query.

Le variabili locali tipizzate in modo implicito vengono dichiarate utilizzando la parola chiave contestuale var.Per ulteriori informazioni, vedere Variabili locali tipizzate in modo implicito (Guida per programmatori C#) e Matrici tipizzate in modo implicito (Guida per programmatori C#).

Esempio

Nell'esempio seguente viene illustrato uno scenario comune in cui la parola chiave var è obbligatoria: un'espressione di query che produce una sequenza di tipi anonimi.In questo scenario, sia la variabile di query che la variabile di iterazione nell'istruzione foreach devono essere tipizzate in modo implicito utilizzando var, poiché non si dispone dell'accesso a un nome di tipo per il tipo anonimo.Per ulteriori informazioni sui tipi anonimi, vedere Tipi anonimi (Guida per programmatori C#).

private static void QueryNames(char firstLetter)
{
    // Create the query. Use of var is required because
    // the query produces a sequence of anonymous types:
    // System.Collections.Generic.IEnumerable<????>.
    var studentQuery =
        from student in students
        where student.FirstName[0] == firstLetter
        select new { student.FirstName, student.LastName };

    // Execute the query and display the results.
    foreach (var anonType in studentQuery)
    {
        Console.WriteLine("First = {0}, Last = {1}", anonType.FirstName, anonType.LastName);
    }
}

Nell'esempio seguente viene utilizzata la parola chiave var in una situazione simile, ma in cui l'utilizzo di var è facoltativo.Poiché student.LastName è una stringa, l'esecuzione della query restituisce una sequenza di stringhe.Il tipo di queryID potrebbe pertanto essere dichiarato come System.Collections.Generic.IEnumerable<string> invece di var.La parola chiave var viene utilizzata per praticità.Nell'esempio la variabile di iterazione nell'istruzione foreach è tipizzata in modo esplicito come stringa, ma potrebbe invece essere dichiarata utilizzando var.Poiché il tipo della variabile di iterazione non è un tipo anonimo, l'utilizzo di var è facoltativo e non obbligatorio.Tenere presente che var non è un tipo, ma un'istruzione per il compilatore affinché vengano eseguite l'inferenza e l'assegnazione del tipo.

// Variable queryID could be declared by using 
// System.Collections.Generic.IEnumerable<string>
// instead of var.
var queryID =
    from student in students
    where student.ID > 111
    select student.LastName;

// Variable str could be declared by using var instead of string.     
foreach (string str in queryID)
{
    Console.WriteLine("Last name: {0}", str);
}

Vedere anche

Riferimenti

Metodi di estensione (Guida per programmatori C#)

var (Riferimenti per C#)

Concetti

Guida per programmatori C#

Espressioni di query LINQ (Guida per programmatori C#)

Altre risorse

LINQ (Language-Integrated Query)