System


.NET Framework 类库
Predicate 泛型委托

注意:此委托在 .NET Framework 2.0 版中是新增的。

表示定义一组条件并确定指定对象是否符合这些条件的方法。

命名空间:System
程序集:mscorlib(在 mscorlib.dll 中)

语法

Visual Basic(声明)
Public Delegate Function Predicate(Of T) ( _
    obj As T _
) As Boolean
Visual Basic(用法)
Dim instance As New Predicate(Of T)(AddressOf HandlerMethod)
C#
public delegate bool Predicate<T> (
    T obj
)
C++
generic<typename T>
public delegate bool Predicate (
    T obj
)
J#
J# 支持使用泛型类型和方法,但不支持进行新的声明。
JScript
JScript 支持泛型类型和方法。

类型参数

T

要比较的对象的类型。

参数

obj

要按照由此委托表示的方法中定义的条件进行比较的对象。

返回值

如果 obj 符合由此委托表示的方法中定义的条件,则为 true;否则为 false
备注

此委托由 ArrayList 类的几种方法使用,用于在集合中搜索元素。

示例

下面的代码示例使用带有 Array.Find 方法的 Predicate 委托搜索 Point 结构的数组。如果 X 和 Y 字段的乘积大于 100,000,此委托表示的方法 ProductGT10 将返回 trueFind 方法为数组的每个元素调用此委托,在符合测试条件的第一个点处停止。

Note注意

Visual Basic 和 C# 用户不需要显式创建委托,也不需要指定泛型方法的类型参数。编译器会根据您提供的方法参数确定必需的类型。

Visual Basic
Imports System
Imports System.Drawing

Public Class Example

    Public Shared Sub Main()

        ' Create an array of five 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) }

        ' To find the first Point structure for which X times Y 
        ' is greater than 100000, pass the array and a delegate 
        ' that represents the ProductGT10 method to the Shared
        ' Find method of the Array class.
        Dim first As Point = Array.Find(points, _
            AddressOf ProductGT10)

        ' Note that you do not need to create the delegate 
        ' explicitly, or to specify the type parameter of the 
        ' generic method, because the compiler has enough
        ' context to determine that information for you.

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

    ' This method implements the test condition for the Find
    ' method.
    Private Shared Function ProductGT10(ByVal p As Point) As Boolean
        If p.X * p.Y > 100000 Then
            Return True
        Else
            Return False
        End If
    End Function
End Class

' This code example produces the following output:
'
'Found: X = 275, Y = 395
C#
using System;
using System.Drawing;

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

        // To find the first Point structure for which X times Y 
        // is greater than 100000, pass the array and a delegate
        // that represents the ProductGT10 method to the Shared 
        // Find method of the Array class. 
        Point first = Array.Find(points, ProductGT10);

        // Note that you do not need to create the delegate 
        // explicitly, or to specify the type parameter of the 
        // generic method, because the C# compiler has enough
        // context to determine that information for you.

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

    // This method implements the test condition for the Find
    // method.
    private static bool ProductGT10(Point p)
    {
        if (p.X * p.Y > 100000)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
}

/* This code example produces the following output:

Found: X = 275, Y = 395
 */
平台

Windows 98、Windows 2000 SP4、Windows CE、Windows Millennium Edition、Windows Mobile for Pocket PC、Windows Mobile for Smartphone、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是对每个平台的所有版本都提供支持。有关受支持版本的列表,请参见系统要求

版本信息

.NET Framework

受以下版本支持:2.0

.NET Compact Framework

受以下版本支持:2.0
请参见

标记 :


Page view tracker