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

Cette rubrique donne une vue d’ensemble des délégués génériques pour les conversions, des prédicats de recherche et des 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 effectue une action 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. 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.

Notes

Ceci constitue un point intéressant concernant les types et les méthodes génériques. La méthode Array.ForEach doit être statique (Shared en Visual Basic) et générique, car Array n’est pas un type générique. La seule raison pour laquelle vous pouvez spécifier un type pour que Array.ForEach fonctionne est que la méthode a sa propre liste de paramètres de type. En revanche, la méthode List<T>.ForEach non générique appartient à la classe générique List<T>, de sorte qu’elle utilise simplement le paramètre de type de sa classe. La classe est fortement typée :la méthode peut donc ê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 aux 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, Find, FindAll, FindIndex, FindLast, FindLastIndex et TrueForAll.

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 les éléments d'un tableau ou d'une liste qui n'ont pas un ordre de tri natif, ou de remplacer 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 surcharge de méthode d'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 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 en un 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 pour générer un tableau du nouveau type à partir du tableau d'origine ou bien la méthode d'instance générique List<T>.ConvertAll<TOutput>(Converter<T,TOutput>) pour produire une liste du nouveau type à partir de la liste d'origine.

Chaînage de délégués

La plupart des méthodes qui utilisent ces délégués retournent un tableau ou une liste, qui peut être passé à une autre méthode. Par exemple, si vous voulez sélectionner certains éléments d'un tableau, convertir ces éléments 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 à la méthode générique ConvertAll. Si le nouveau type d'élément n'a pas un ordre de tri naturel, vous pouvez passer le tableau retourné par la méthode générique ConvertAll à la méthode générique Sort<T>(T[], Comparison<T>).

Voir aussi