Predicate 泛型委托

此委托在 .NET Framework 2.0 版中是新增的
表示定义一组条件并确定指定对象是否符合这些条件的方法.

public delegate bool Predicate<T> 
 
(
    T obj
)
  //T 代表要比较的对象的类型

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

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

using System;
using System.Drawing;

public class Example
{
    
public static void Main()
    
{
        
// Create an array of five Point structures.
        Point[] points = new Point(100200), 
            
new Point(150250), new Point(250375), 
            
new Point(275395), new Point(295450) }
;

        
// 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
 
*/

========================= 

Code

 

提供免费空间的空间商:
Web Hosting By Brinkster

posted on 2007-11-12 15:46  simhare  阅读(478)  评论(0)    收藏  举报

导航