.NET (二)委托第二讲:内置委托Func

在上一章节中,我们自己声明了一个委托:

 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 = 0; 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(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);
            }

        }

我们仍然可以省略委托名,使用匿名委托,修改代码为:

            MyCal(list, delegate(int i)
            {
                if (i % 2 == 0)
                {
                    return true;
                }
                return false;
            });
posted @ 2016-11-07 14:07  思如雨  阅读(540)  评论(0编辑  收藏  举报