Lire en anglais

Partager via


Predicate<T> Délégué

Définition

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.

C#
public delegate bool Predicate<in T>(T obj);
C#
public delegate bool Predicate<T>(T obj);

Paramètres de type

T

Type de l'objet à comparer.

Ce paramètre de type est contravariant. Cela signifie que vous pouvez utiliser le type spécifié ou tout type moins dérivé. Pour plus d’informations sur la covariance et la contravariance, consultez Covariance et contravariance dans les génériques.

Paramètres

obj
T

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

Valeur renvoyée

Boolean

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

Exemples

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

C#
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’il utilise une expression lambda pour représenter le Predicate<T> délégué. Chaque élément du points tableau est passé à l’expression lambda jusqu’à ce que l’expression trouve 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.

C#
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

Remarques

Ce délégué est utilisé par plusieurs méthodes et Array 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 délimitées localement sont disponibles pour l’expression lambda, il est facile de tester une condition qui n’est pas connue précisément au moment de la compilation. Ceci est simulé dans l’exemple suivant, qui définit une classe qui contient des informations sur une HockeyTeam équipe de la Ligue nationale de hockey et l’année dans laquelle elle a été fondée. L’exemple définit un tableau de valeurs entières qui représentent des années et affecte de façon aléatoire un élément du tableau foundedBeforeYear, qui est une variable délimitée localement à la méthode de l’exemple Main . Étant donné que les variables délimitées localement sont disponibles pour 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.

C#
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

Méthodes d’extension

GetMethodInfo(Delegate)

Obtient un objet qui représente la méthode représentée par le délégué spécifié.

S’applique à

Produit Versions
.NET Core 1.0, Core 1.1, Core 2.0, Core 2.1, Core 2.2, Core 3.0, Core 3.1, 5, 6, 7
.NET Framework 2.0, 3.0, 3.5, 4.0, 4.5, 4.5.1, 4.5.2, 4.6, 4.6.1, 4.6.2, 4.7, 4.7.1, 4.7.2, 4.8
.NET Standard 1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 2.0, 2.1
UWP 10.0

Voir aussi