系统泛型委托

一、Action  封装一个方法,该方法只有一个参数并且不返回值

public delegate void Action<in T>(T obj);

image

List<Dog> list = GetDogList();
      list.ForEach(new Action<Dog>(delegate(Dog d) { Console.WriteLine(d.Name); }));
      list.ForEach(delegate(Dog d) { Console.WriteLine(d.Name); });
      list.ForEach(d => { Console.WriteLine(d.Name); });
      list.ForEach(d => Console.WriteLine(d.Name));

 

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

public delegate bool Predicate<in T>(T obj);

系统泛型委托_第1张图片

image

list = list.FindAll(d => { return d.Age > 1; });

list = list.FindAll(d => d.Age > 1);

系统泛型委托_第2张图片

三、Comparison  表示比较同一类型的两个对象的方法。

// 返回结果: 
     //     一个有符号整数,指示 x 与 y 的相对值,如下表所示。 值 含义 小于 0 x 小于 y。 0 x 等于 y。 大于 0 x 大于 y。
     public delegate int Comparison<in T>(T x, T y);

系统泛型委托_第3张图片

 

list.Sort((x, y) => x.Age - y.Age);

 

四、Func 

public delegate TResult Func<in T, out TResult>(T arg);

系统泛型委托_第4张图片

IEnumerable<SmallDog> iList = list.Select<Dog, SmallDog>(new Func<Dog, SmallDog>(delegate(Dog d) { return new SmallDog { Name = d.Name }; }));
      IEnumerable<SmallDog> iList1 = list.Select(d => { return new SmallDog { Name = d.Name }; });
      var ilist2 = list.Select(d => new { Name = d.Name });

系统泛型委托_第5张图片

var ilist3 = list.Select(d => d.Name);

系统泛型委托_第6张图片

image

你可能感兴趣的:(泛型)