Comment utiliser des tableaux et des variables locales implicitement typés dans une expression de requête (Guide de programmation C#)

Vous pouvez utiliser des variables locales implicitement typées chaque fois que vous voulez que le compilateur détermine le type d’une variable locale. Vous devez utiliser des variables locales implicitement typées pour stocker des types anonymes, qui sont souvent utilisés dans les expressions de requête. Les exemples suivants illustrent des utilisations facultatives et obligatoires de variables locales implicitement typées dans des requêtes.

Les variables locales implicitement typées sont déclarées à l’aide du mot clé contextuel var. Pour plus d’informations, consultez Variables locales implicitement typées et Tableaux implicitement typés.

Exemples

L’exemple suivant illustre un scénario courant dans lequel le mot clé var est obligatoire : une expression de requête qui produit une séquence de types anonymes. Dans ce scénario, la variable de requête et la variable d’itération figurant dans l’instruction foreach doivent être implicitement typées avec var, car vous n’avez pas accès à un nom de type pour le type anonyme. Pour plus d’informations sur les types anonymes, consultez Types anonymes.

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

Dans l’exemple suivant, le mot clé var est utilisé dans un cas similaire, à la différence que l’utilisation de var est facultative. Comme student.LastName est une chaîne, l’exécution de la requête retourne une séquence de chaînes. De ce fait, le type de queryId pourrait être déclaré en tant que System.Collections.Generic.IEnumerable<string> au lieu de var. Le mot clé var est utilisé pour des raisons pratiques. Dans l’exemple, la variable d’itération figurant dans l’instruction foreach est explicitement typée en tant que chaîne, mais elle aurait pu être déclarée à l’aide de var. Comme le type de la variable d’itération n’est pas un type anonyme, l’utilisation de var est facultative et non obligatoire. Pour rappel, var n’est pas en soi un type, mais une instruction indiquant au compilateur de déduire et d’assigner le type.

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

Voir aussi