public delegate TResult Func <T, TResult>(T arg)數組
這是一個委託方法,這個方法有一個參數T(T arg),好比int arg,string arg等等;一個返回值TResult; 要想讓輸入的參數arg返回TResult,則必須將一個帶有T arg參數的方法用委託的方式賦值給Func方法;好比以下的方法就符合Func<string,int>這個委託的定義:函數
private int GetAge(string age) { return Int32.Parse(age); }
下面用一個比較詳細的實例來講明這個方法的用法,其中會用到Lambda表達式(只是匿名函數的一種表達方式而已,沒必要大驚小怪):spa
定義委託:code
//這是一個計算年齡的方法 //輸入一個字符串數組,其中的字符串分別通過指定的conveter委託方法的運算之後 //字符串值就變成了整數數組 public int[] GetGoodAge(string[] rawAges, FUNC<string, int> conveter) { List<string> result = new List<string>(); foreach(string age in rawAges) { result.Add(conveter(age)); } return result.ToArray(); }
在主函數能夠這樣來寫:blog
Main() { string[] ages = new string[] {"123lk","345op","909ka","234ja"}; //輸入一組字符串數組 int[] result = GetGoodAge(ages, age=> Int32.Parse(age.Substring(0,2))); //調用委託方法int[] GetGoodAge(string[],Func<string,int> conventer) //這裏conventer就是一個匿名函數,用的是Lambda表達式 //表示輸入參數age,而後返回Int32.Parse(age.Substring(0,2))的值 //這個返回值輸入到result數組中 foreach(int age in result) { Console.WriteLine(age); } }
其實這個委託方法的主要特色就是節省代碼,若是有多個處理輸入和輸出的方法,直接將函數做爲參數傳進去就能夠了,省去了反覆調用的麻煩。字符串