經常看到 Func<int, bool>...這樣的寫法,看到這樣的就沒有心思看下去了。我們學技術還是需要靜下心來。
對Func<int,bool>的Func轉到定義看它的解釋:
// 摘要: // 封裝一個具有一個參數並返回 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 4
1與4,2與3進行對比,你發現了什么?!參數類型一樣對吧。 5
Func是一個委托,委托里面可以存方法,那我們就來建一個與之匹配的方法:
以Func<int,bool>為例:
private bool IsNumberLessThen5(int number)
{return number < 5;}
Func<int,bool> f1 = IsNUmberLessThen5;
調用:
bool flag= f1(4);
以下是具體代碼:
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; } } }