Func的使用方法(轉載)

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);
     }
}

其實這個委託方法的主要特色就是節省代碼,若是有多個處理輸入和輸出的方法,直接將函數做爲參數傳進去就能夠了,省去了反覆調用的麻煩。字符串

相關文章
相關標籤/搜索