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

È possibile usare le variabili locali tipizzate in modo implicito ogni volta che si vuole che il compilatore determini il tipo di una variabile locale. È necessario usare le variabili locali tipizzate in modo implicito per archiviare i tipi anonimi, che vengono spesso usati nelle espressioni di query. Gli esempi seguenti illustrano tipi d'uso facoltativi e obbligatori delle variabili locali tipizzate in modo implicito nelle query.

Le variabili locali tipizzate in modo implicito vengono dichiarate usando la parola chiave contestuale var. Per altre informazioni, vedere Variabili locali tipizzate in modo implicito e Matrici tipizzate in modo implicito.

Esempi

L'esempio seguente mostra 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 usando var, perché non si ha accesso a un nome di tipo per il tipo anonimo. Per altre informazioni sui tipi anonimi, vedere Tipi anonimi.

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);
    }
}

L'esempio seguente usa la parola chiave var in una situazione simile, ma in cui l'uso di var è facoltativo. Poiché student.LastName è una stringa, l'esecuzione della query restituisce una sequenza di stringhe. Il tipo di queryId può quindi essere dichiarato come System.Collections.Generic.IEnumerable<string> invece di var. La parola chiave var viene usata per praticità. Nell'esempio la variabile di iterazione nell'istruzione foreach è tipizzata in modo esplicito come stringa, ma potrebbe invece essere dichiarata usando var. Poiché il tipo della variabile di iterazione non è un tipo anonimo, l'uso di var è facoltativo e non obbligatorio. Tenere presente che var non è un tipo, ma un'istruzione che indica al compilatore di derivare tramite inferenza e assegnare il 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);
}

Vedi anche