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