# Predicate<T> Delegate

## Definition

``````generic <typename T>
public delegate bool Predicate(T obj);``````
``public delegate bool Predicate<in T>(T obj);``
``public delegate bool Predicate<T>(T obj);``
``type Predicate<'T> = delegate of 'T -> bool``
``Public Delegate Function Predicate(Of In T)(obj As T) As Boolean ``
``Public Delegate Function Predicate(Of T)(obj As T) As Boolean ``

#### Type Parameters

T

This type parameter is contravariant. That is, you can use either the type you specified or any type that is less derived. For more information about covariance and contravariance, see Covariance and Contravariance in Generics.

obj
T

Boolean

Inheritance
Predicate<T>

## Examples

``````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
``````
``````Imports System.Drawing

Public Class Example
Public Shared Sub Main()

' Create an array of Point structures.
Dim points() As Point = { new Point(100, 200), new Point(150, 250),
new Point(250, 375), new Point(275, 395),
new Point(295, 450) }

' Define the Predicate(Of T) delegate.
Dim predicate As Predicate(Of Point) = AddressOf Example.FindPoints

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

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

Private Shared Function FindPoints(obj As Point) As Boolean
Return obj.X * obj.Y > 100000
End Function

End Class
' The example displays the following output:
'       Found: X = 275, Y = 395
``````

``````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
``````
``````Imports System.Drawing

Public Class Example
Public Shared Sub Main()

' Create an array of Point structures.
Dim points() As Point = { 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.
Dim first As Point = Array.Find(points,
Function(x) x.X * x.Y > 100000 )

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

## Remarks

ArrayList<T> 类的多个方法使用此委托来搜索集合中的元素。This delegate is used by several methods of the Array and List<T> classes to search for elements in the collection.

``````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("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
``````
``````Imports System.Collections.Generic

Public Class HockeyTeam
Private _name As String
Private _founded As Integer

Public Sub New(name As String, year As Integer)
_name = name
_founded = year
End Sub

Public ReadOnly Property Name As String
Get
Return _name
End Get
End Property

Public ReadOnly Property Founded As Integer
Get
Return _founded
End Get
End Property
End Class

Module Example
Public Sub Main()
Dim rnd As New Random()
Dim teams As New List(Of HockeyTeam)()
teams.AddRange( { new HockeyTeam("Detroit Red Wings", 1926),
new HockeyTeam("Chicago Blackhawks", 1926),
new HockeyTeam("San Jose Sharks", 1991),
new HockeyTeam("St. Louis Blues", 1967) } )
Dim years() As Integer = { 1920, 1930, 1980, 2000 }
Dim foundedBeforeYear As Integer = years(rnd.Next(0, years.Length))
Console.WriteLine("Teams founded before {0}:", foundedBeforeYear)
For Each team in teams.FindAll( Function(x) x.Founded <= foundedBeforeYear )
Console.WriteLine("{0}: {1}", team.Name, team.Founded)
Next
End Sub
End Module
' The example displays output similar to the following:
'       Teams founded before 1930:
'       Detroit Red Wings: 1926
'       Chicago Blackhawks: 1926