Cet article a fait l’objet d’une traduction automatique. Pour afficher l’article en anglais, activez la case d’option Anglais. Vous pouvez également afficher le texte anglais dans une fenêtre contextuelle en faisant glisser le pointeur de la souris sur le texte traduit.
Traduction
Anglais

Predicate<T> délégué

 

Date de publication : novembre 2016

Représente la méthode qui définit un ensemble de critères et détermine si l'objet spécifié répond à ces critères.

Espace de noms:   System
Assembly:  mscorlib (dans mscorlib.dll)

public delegate bool Predicate<in T>(
	T obj
)

Paramètres

obj
Type: T

Objet à comparer par rapport aux critères définis dans la méthode représentée par ce délégué.

Valeur de retour

Type: System.Boolean

trueSi obj répond aux critères définis dans la méthode représentée par ce délégué ; sinon, false.

Paramètres de type

inT

Le type de l’objet à comparer.

Ce délégué est utilisé par plusieurs méthodes de la Array et List<T> classes pour rechercher des éléments dans la collection.

En règle générale, le Predicate<T> délégué est représenté par une expression lambda. Étant donné que les variables ayant une étendue locale sont disponibles à l’expression lambda, il est facile de tester une condition qui n’est pas précisément connue au moment de la compilation. Cela est simulé dans l’exemple suivant, qui définit un HockeyTeam classe qui contient des informations sur une équipe et la ligue Hockey National et l’année dans laquelle il a été créé. L’exemple définit un tableau d’entiers qui représentent des années et affecte de manière aléatoire un élément du tableau à foundedBeforeYear, qui est une variable définie localement pour l’exemple Main (méthode). Étant donné que les variables ayant une étendue locale ne peut être une expression lambda, l’expression lambda passée à la List<T>.FindAll (méthode) est en mesure de retourner un HockeyTeam objet pour chaque équipe fondée sur ou avant cette année.

using System;
using System.Collections.Generic;

public class HockeyTeam
{
   private string _name;
   private int _founded;

   public HockeyTeam(string name, int year)
   {
      _name = name;
      _founded = year;
   }

   public string Name {
      get { return _name; }
   }

   public int Founded {
      get { return _founded; }
   }
}

public class Example
{
   public static void Main()
   {
      Random rnd = new Random();
      List<HockeyTeam> teams = new List<HockeyTeam>();
      teams.AddRange( new HockeyTeam[] { new HockeyTeam("Detroit Red Wings", 1926), 
                                         new HockeyTeam("Chicago Blackhawks", 1926),
                                         new HockeyTeam("San Jose Sharks", 1991),
                                         new HockeyTeam("Montreal Canadiens", 1909),
                                         new HockeyTeam("St. Louis Blues", 1967) } );
      int[] years = { 1920, 1930, 1980, 2000 };
      int foundedBeforeYear = years[rnd.Next(0, years.Length)];
      Console.WriteLine("Teams founded before {0}:", foundedBeforeYear);
      foreach (var team in teams.FindAll( x => x.Founded <= foundedBeforeYear))
         Console.WriteLine("{0}: {1}", team.Name, team.Founded);
   }
}
// The example displays output similar to the following:
//       Teams founded before 1930:
//       Detroit Red Wings: 1926
//       Chicago Blackhawks: 1926
//       Montreal Canadiens: 1909

Le de code suivant montre comment utiliser un Predicate<T> délégué avec le Array.Find<T> méthode pour rechercher un tableau de Point structures. L’exemple définit explicitement une Predicate<T> délégué nommé predicate et lui attribue une méthode nommée FindPoints qui retourne true si le produit de la Point.X et Point.Y champs est supérieur à 100 000. Notez qu’il est habituel d’utiliser une expression lambda au lieu de définir explicitement un délégué du type Predicate<T>, comme l’illustre le deuxième exemple.

using System;
using System.Drawing;

public class Example
{
   public static void Main()
   {
      // Create an array of Point structures.
      Point[] points = { new Point(100, 200), 
                         new Point(150, 250), new Point(250, 375), 
                         new Point(275, 395), new Point(295, 450) };

      // Define the Predicate<T> delegate.
      Predicate<Point> predicate = FindPoints;

      // Find the first Point structure for which X times Y  
      // is greater than 100000. 
      Point first = Array.Find(points, predicate);

      // Display the first structure found.
      Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
   }

   private static bool FindPoints(Point obj)
   {
      return obj.X * obj.Y > 100000;
   }
}
// The example displays the following output:
//        Found: X = 275, Y = 395

L’exemple suivant est identique à l’exemple précédent, sauf qu’elle utilise une expression lambda pour représenter le Predicate<T> déléguer. Chaque élément de la points tableau est passé à l’expression lambda jusqu'à ce que l’expression de recherche un élément qui répond aux critères de recherche. Dans ce cas, l’expression lambda retourne true si le produit des champs X et Y est supérieur à 100 000.

using System;
using System.Drawing;

public class Example
{
   public static void Main()
   {
      // Create an array of Point structures.
      Point[] points = { new Point(100, 200), 
                         new Point(150, 250), new Point(250, 375), 
                         new Point(275, 395), new Point(295, 450) };

      // Find the first Point structure for which X times Y  
      // is greater than 100000. 
      Point first = Array.Find(points, x => x.X * x.Y > 100000 );

      // Display the first structure found.
      Console.WriteLine("Found: X = {0}, Y = {1}", first.X, first.Y);
   }
}
// The example displays the following output:
//        Found: X = 275, Y = 395

Plateforme Windows universelle
Disponible depuis 8
.NET Framework
Disponible depuis 2.0
Bibliothèque de classes portable
Pris en charge dans : plateformes .NET portables
Silverlight
Disponible depuis 2.0
Silverlight pour Windows Phone
Disponible depuis 7.0
Windows Phone
Disponible depuis 8.1
Retour au début
Afficher: