.NET (二)委託第二講:內置委託Func

在上一章節中,咱們本身聲明瞭一個委託: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;
            });
相關文章
相關標籤/搜索