在上一章节中,咱们本身声明了一个委托:spa
public delegate bool Cal(int num);
接受int参数,返回bool类型,目的是过滤集合中的 奇数 或者 偶数。code
.NET 为咱们内置了一个泛型委托,用于处理这种状况,省去了自定义的麻烦。blog
public delegate TResult Func<in T, out TResult>(T arg);
Func是.NET定义的委托,接受任何参数,并返回自定义类型结果。it
咱们能够将代码修改成:public static void MyCal(List<int> list, Cal cal)class
public static void MyCal(List<int> list, Func<int,bool> func) { for (int i = 0; i < list.Count; i++) { if (func(list[i])) { list.RemoveAt(i); i--; } } }
将本来方法中的参数Cal 修改成 Func类型。同时删除public delegate bool Cal(int num);委托声明语句。泛型
像以下调用:foreach
static void Main(String[] args) { List<int> list = new List<int>(); list.Add(1); list.Add(2); list.Add(3); list.Add(4); list.Add(5); list.Add(7); list.Add(6); Func<int, bool> func = new Func<int, bool>(Even); MyCal(list, func); foreach (int i in list) { Console.WriteLine(i); } }
咱们仍然能够省略委托名,使用匿名委托,修改代码为:List
MyCal(list, delegate(int i) { if (i % 2 == 0) { return true; } return false; });