常常看到 Func<int, bool>...這樣的寫法,看到這樣的就沒有心思看下去了。咱們學技術仍是須要靜下心來。spa
對Func<int,bool>的Func轉到定義看它的解釋:code
// 摘要: // 封裝一個具備一個參數並返回 TResult 參數指定的類型值的方法。 // // 參數: // arg: // 此委託封裝的方法的參數。 // // 類型參數: // T: // 此委託封裝的方法的參數類型。 // // TResult: // 此委託封裝的方法的返回值類型。 // // 返回結果: // 此委託封裝的方法的返回值。 [TypeForwardedFrom("System.Core, Version=3.5.0.0, Culture=Neutral, PublicKeyToken=b77a5c561934e089")] public delegate TResult Func<in T, out TResult>(T arg);
in T 表明輸入參數 1
out TResult 表示輸出參數 2
再看返回值是 TResult 3
構造方法須要的參數是T 4blog
1與4,2與3進行對比,你發現了什麼?!參數類型同樣對吧。 5string
Func是一個委託,委託裏面能夠存方法,那咱們就來建一個與之匹配的方法:
以Func<int,bool>爲例:it
private bool IsNumberLessThen5(int number)io
{return number < 5;} class
Func<int,bool> f1 = IsNUmberLessThen5;方法
調用:
bool flag= f1(4);技術
如下是具體代碼:static
using System; using System.Collections.Generic; using System.Linq; using System.Linq.Expressions; using System.Text; using System.Threading.Tasks; namespace ConsoleApplication1 { class Program { static void Main(string[] args) { Func<int, bool> f1 = IsNumberLessThen5; bool flag = f1(4); Console.WriteLine(flag); //如下是其它的用法,與IsNumberLessThen5做用相同。只是寫法不一樣而已。 Func<int, bool> f2 = i => i < 5; Func<int, bool> f3 = (i) => { return i < 5; }; Func<int, bool> f4 = delegate(int i) { return i < 5; }; flag = f2(4); Console.WriteLine(flag); flag = f3(4); Console.WriteLine(flag); flag = f4(4); Console.WriteLine(flag); Console.ReadLine(); } private static bool IsNumberLessThen5(int number) { if (number < 5) return true; return false; } } }