• 三种泛型委托简介


    1 泛型委托 Predicate<T>

      早在Framework 2.0 的时候,微软就为 List<T> 类添加了 Find、FindAll 、ForEach 等方法用作数据的查找。

      public T Find ( Predicate<T> match)
      public List<T> FindAll(Predicate<T> match)

      在这些方法中存在一个Predicate <T> 表达式,它是一个返回bool的泛型委托,能接受一个任意类型的对象作为参数。

      public delegate bool Predicate<T>(T obj)

      在下面例子中,Predicate 委托绑定了参数为Person类的方法Match作为查询条件,然后使用 FindAll 方法查找到合适条件的 List<Person> 集合。

     1     class Program
     2     {
     3         static void Main(string[] args)
     4         {
     5             List<Person> list = GetList();
     6             //绑定查询条件
     7             Predicate<Person> predicate = new Predicate<Person>(Match);
     8             List<Person> result = list.FindAll(predicate);
     9             Console.WriteLine(“Person count is : ” + result.Count);
    10             Console.ReadKey();
    11         }
    12         //模拟源数据
    13         static List<Person> GetList()
    14         {
    15             var personList = new List<Person>();
    16             var person1 = new Person(1,"Leslie",29);
    17             personList.Add(person1);
    18             ........
    19             return personList;
    20         }
    21         //查询条件
    22         static bool Match(Person person)
    23         {
    24             return person.Age <= 30;
    25         }
    26     }
    27 
    28     public class Person
    29     {
    30         public Person(int id, string name, int age)
    31         {
    32             ID = id;
    33             Name = name;
    34             Age = age;
    35         }
    36 
    37         public int ID
    38         { get; set; }
    39         public string Name
    40         { get; set; }
    41         public int Age
    42         { get; set; }
    43     }
     

    2  泛型委托 Action

      Action<T> 的使用方式与 Predicate<T> 相似,不同之处在于 Predicate<T> 返回值为 bool , Action<T> 的返回值为 void。
      Action 支持0~16个参数,可以按需求任意使用。

      public delegate void Action()
      public delegate void Action<T1>(T1 obj1)
      public delegate void Action<T1,T2> (T1 obj1, T2 obj2)
      public delegate void Action<T1,T2,T3> (T1 obj1, T2 obj2,T3 obj3)
      ............
      public delegate void Action<T1,T2,T3,......,T16> (T1 obj1, T2 obj2,T3 obj3,......,T16 obj16)

     
     1         static void Main(string[] args)
     2         {
     3             Action<string> action=ShowMessage;
     4             action("Hello World");
     5             Console.ReadKey();
     6         }
     7 
     8         static void ShowMessage(string message)
     9         {
    10             MessageBox.Show(message);
    11         }

     

    3 泛型委托 Func

      委托 Func 与 Action 相似,同样支持 0~16 个参数,不同之处在于Func 必须具有返回值

      public delegate TResult Func<TResult>()
      public delegate TResult Func<T1,TResult>(T1 obj1)
      public delegate TResult Func<T1,T2,TResult>(T1 obj1,T2 obj2)
      public delegate TResult Func<T1,T2,T3,TResult>(T1 obj1,T2 obj2,T3 obj3)
      ............
      public delegate TResult Func<T1,T2,T3,......,T16,TResult>(T1 obj1,T2 obj2,T3 obj3,......,T16 obj16)

     
     1         static void Main(string[] args)
     2         {
     3             Func<double, bool, double> func = Account;
     4             double result=func(1000, true);
     5             Console.WriteLine("Result is : "+result);
     6             Console.ReadKey();
     7         }
     8 
     9         static double Account(double a,bool condition)
    10         {
    11             if (condition)
    12                 return a * 1.5;
    13             else
    14                 return a * 2;
    15         }
  • 相关阅读:
    捕获异常的两种方式Exception
    线程的随机性
    单例模式简单解析--Singleton 单例模式(懒汉方式和饿汉方式)
    LeetCode 116. 填充每个节点的下一个右侧节点指针
    LeetCode 129. 求根到叶子节点数字之和
    LeetCode 124. 二叉树中的最大路径和
    LeetCode 119. 杨辉三角 II
    LeetCode 118. 杨辉三角
    LeetCode 113. 路径总和 II
    LeetCode 114. 二叉树展开为链表
  • 原文地址:https://www.cnblogs.com/xuekai-to-sharp/p/3368701.html
Copyright © 2020-2023  润新知