一、Action 封装一个方法,该方法只有一个参数并且不返回值
public delegate void Action<in T>(T obj);
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);
list = list.FindAll(d => { return d.Age > 1; });
list = list.FindAll(d => d.Age > 1);
三、Comparison 表示比较同一类型的两个对象的方法。
// 返回结果:
// 一个有符号整数,指示 x 与 y 的相对值,如下表所示。 值 含义 小于 0 x 小于 y。 0 x 等于 y。 大于 0 x 大于 y。
public delegate int Comparison<in T>(T x, T y);
list.Sort((x, y) => x.Age - y.Age);
四、Func
public delegate TResult Func<in T, out TResult>(T arg);
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 });
var ilist3 = list.Select(d => d.Name);