zoukankan      html  css  js  c++  java
  • 三种泛型委托简介

    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         }
  • 相关阅读:
    谷粒商城网关服务建立(七)
    谷粒商城Nacos配置(六)
    谷粒商城Nacos配置(五)
    Nacos入门
    谷粒商城心得二
    谷粒商城的快速开发(四)
    谷粒商城的快速开发(三)
    谷粒商城心得一
    谷粒商城的环境搭建(二)
    PowerDesigner16安装&破解
  • 原文地址:https://www.cnblogs.com/xuekai-to-sharp/p/3368701.html
Copyright © 2011-2022 走看看