Partager via


Délégués génériques pour la manipulation de tableaux et de listes

Cette rubrique présente les délégués génériques pour les conversions, les prédicats de recherche et les actions à effectuer sur les éléments d'un tableau ou d'une collection.

Délégués génériques pour la manipulation de tableaux et de listes

Le délégué générique Action<T> représente une méthode qui exécute une action quelconque sur un élément du type spécifié. Vous pouvez créer une méthode qui exécute l'action souhaitée sur l'élément, créer une instance du délégué Action<T> pour représenter cette méthode puis passer le tableau et le délégué à la méthode générique statique Array.ForEach<T>. La méthode est appelée pour chaque élément du tableau.

La classe générique List<T> fournit également une méthode ForEach qui utilise le délégué Action<T>. Cette méthode n'est pas générique.

RemarqueRemarque

À cet égard, il est intéressant de noter le point suivant sur les types et les méthodes génériques.La méthode Array.ForEach<T> doit être statique (Shared en Visual Basic) et générique, car Array n'est pas un type générique ; le fait que la méthode possède sa propre liste de paramètre de type est la seule raison vous permettant de spécifier un type sur lequel Array.ForEach<T> agit.En revanche, la méthode List<T>.ForEach non générique appartient à la classe générique List<T> et utilise donc simplement le paramètre de type de sa classe.La classe étant fortement typée, la méthode peut être une méthode d'instance.

Le délégué générique Predicate<T> représente une méthode qui détermine si un élément particulier répond à des critères que vous définissez. Vous pouvez l'utiliser avec les méthodes génériques statiques suivantes de Array pour rechercher un élément ou un ensemble d'éléments : Exists<T>, Find<T>, FindAll<T>, FindIndex, FindLast<T>, FindLastIndex et TrueForAll<T>.

Predicate<T> fonctionne également avec les méthodes d'instance non génériques correspondantes de la classe générique List<T>.

Le délégué générique Comparison<T> vous permet de fournir un ordre de tri pour des éléments de tableau ou de liste sans ordre de tri natif ou encore de substituer l'ordre de tri natif. Créez une méthode qui effectue la comparaison, créez une instance du délégué Comparison<T> pour représenter votre méthode, puis passez le tableau et le délégué à la méthode générique statique Array.Sort<T>(T[], Comparison<T>). La classe générique List<T> fournit une méthode surchargée de l'instance correspondante, List<T>.Sort(Comparison<T>).

Le délégué générique Converter<TInput, TOutput> vous permet de définir une conversion entre deux types et de convertir un tableau d'un type en un tableau de l'autre type ou encore de convertir une liste d'un type en une liste de l'autre type. Créez une méthode qui convertit les éléments de la liste existante dans le nouveau type, créez une instance de délégué pour représenter la méthode et utilisez la méthode statique générique Array.ConvertAll<TInput, TOutput> pour générer un tableau du nouveau type à partir du tableau d'origine ou la méthode d'instance générique List<T>.ConvertAll<TOutput> pour générer une liste du nouveau type à partir de la liste d'origine.

Chaînage de délégués

Un grand nombre des méthodes qui utilisent ces délégués retournent un tableau ou une liste qui peut être passé à une autre méthode. Si, par exemple, vous souhaitez sélectionner certains éléments d'un tableau, les convertir en un nouveau type puis les enregistrer dans un nouveau tableau, vous pouvez passer le tableau retourné par la méthode générique FindAll<T> à la méthode générique ConvertAll<TInput, TOutput>. Si le nouveau type d'élément ne dispose pas d'un ordre de tri natif, vous pouvez passer le tableau retourné par la méthode générique ConvertAll<TInput, TOutput> à la méthode générique Sort<T>(T[], Comparison<T>).

Voir aussi

Référence

System.Collections.Generic

System.Collections.ObjectModel

Concepts

Génériques dans le .NET Framework

Collections génériques dans le .NET Framework

Interfaces génériques

Avantages et limitations des génériques

Covariance et contravariance dans les génériques