Partager via


LINQ et types génériques (C#)

Les requêtes LINQ sont basées sur des types génériques introduits dans la version 2.0 du .NET Framework. Il n'est pas nécessaire de connaître parfaitement les génériques pour commencer à écrire des requêtes. Toutefois, il est important de comprendre deux concepts de base :

  1. Lorsque vous créez une instance d'une classe de collection générique telle que List<T>, vous remplacez le « T » par le type des objets contenus dans la liste. Par exemple, une liste de chaînes est exprimée sous la forme List<string> et une liste d'objets Customer sous la forme List<Customer>. Une liste générique est fortement typée et offre de nombreux avantages par rapport aux collections qui stockent leurs éléments en tant que Object. Si vous essayez d'ajouter un Customer à un List<string>, vous obtiendrez une erreur à la compilation. Vous pouvez facilement utiliser des collections génériques car il n'est pas nécessaire d'effectuer un cast de type au moment de l'exécution.

  2. IEnumerable<T> est l'interface qui permet l'énumération des classes de collections génériques à l'aide de l'instruction foreach. Les classes de collections génériques prennent en charge IEnumerable<T> et les classes de collections non génériques, telles que ArrayList, prennent en charge IEnumerable.

Pour plus d'informations sur les génériques, consultez Génériques (guide de programmation C#).

Variables IEnumerable <T> dans les requêtes LINQ

Les variables de requête LINQ sont typées comme IEnumerable<T> ou de type dérivé comme IQueryable<T>. Lorsque vous avez une variable de requête typée comme IEnumerable<Customer>, cela signifie simplement que la requête, lorsqu'elle est exécutée, génère une séquence de zéro objets Customer ou plus.

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

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

Pour plus d'informations, consultez Relations des types dans des opérations de requête LINQ (C#).

Gestion des déclarations de type générique par le compilateur

Si vous le souhaitez, vous pouvez éviter d'utiliser la syntaxe générique à l'aide du mot clé var. Le mot clé var indique au compilateur de déduire le type d'une variable de requête de la source de données spécifiée dans la clause from. L'exemple suivant génère le même code compilé que dans l'exemple précédent :

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

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

Le mot clé var est utile lorsque le type de la variable est évident ou lorsqu'il n'est pas particulièrement important de spécifier explicitement les types génériques imbriqués tels que ceux générés par les requêtes de groupe. En général, si vous utilisez var, vous devez savoir que cela peut compliquer la lecture de votre code. Pour plus d'informations, consultez Variables locales implicitement typées (Guide de programmation C#).

Voir aussi

Référence

Génériques (guide de programmation C#)

Autres ressources

Mise en route de LINQ en C#