1、Predicate
Predicate
相当于 Func
和Action
类似的委托。表示定义一组条件并确定指定对象是否符合这些条件的方法。Predicate
委托通常由 Array
和 List
类的几种方法使用,常用于在集合中搜索元素。
.NET Framework中的定义如下,
public delegate bool Predicate
例如,
using System;using System.Reflection;using System.Collections.Generic;namespace Predicate{ public struct Point { public Point(int x,int y) { this.X = x; this.Y = y; } public int X { get;set;} public int Y { get;set;} } class Program { static void Main(string[] args) { Point[] points = { new Point(100,200), new Point(150,250), new Point(250,375), new Point(275,390), new Point(296,400) }; Predicatepredicate = FindPoints; Point first1 = Array.Find(points, predicate); Console.WriteLine("使用FindPoints:"); Console.WriteLine($"Found:X={first1.X},Y={first1.Y}"); Point first2 = Array.Find(points, ptn => ptn.X * ptn.Y > 100000); Console.WriteLine("使用Lambda:"); Console.WriteLine($"Found:X={first2.X},Y={first2.Y}"); Console.ReadKey(); } private static bool FindPoints(Point ptn) { return ptn.X * ptn.Y > 100000; } }}
2、Comparison
Comparison
委托由 Array
类的 Sort
方法重载和 List
类的 Sort(Comparison
方法重载使用,用于对数组或列表中的元素进行排序。
.NET Framework中的定义如下,
public delegate int Comparison
例如,
using System;class ListSort{ static void Main() { int[] nums = {3,6,8,1,2,9}; //使用匿名方法实现 Comparison Array.Sort(nums , delegate(int i,int j){ if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序 { // 这里是倒序排列 return 0; //相等 返回 0 } else if (i < j) { return 1; } else return -1; }); foreach(int i in nums) Console.Write(i+","); Console.WriteLine(); nums=new int[] {13,16,18,11,12,19}; //使用lambda实现 Comparison Array.Sort(nums , (int i,int j)=>{ //使用匿名方法实现 Comparison if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序 { // 这里是倒序排列 return 0; //相等 返回 0 } else if (i < j) { return 1; } else return -1; }); foreach(int i in nums) Console.Write(i+","); Console.WriteLine(); nums=new int[] {23,26,28,21,22,29}; //使用定义方法实现 Comparison Array.Sort(nums , CompareValue); #region output foreach(int i in nums) Console.Write(i+","); Console.WriteLine(); #endregion } private static int CompareValue(int i,int j) { if (i == j) // 这个接口的返回值为 1 0 -1. 用来实现排序 { // 这里是倒序排列 return 0; //相等 返回 0 } else if (i < j) { return 1; } else return -1; }}