Lambda表示式的入門經驗
最近看了一些C#的視訊教程,偶有一點小心得,寫出來大家分享一下。
首先是委託的一些匿名方法
例子:
class Program {
static int Test1(int arg1, int arg2) { return arg1 + arg2; } static void Main(string[] args) { //Func<int, int, int> plus = Test1; //修改為匿名方法的實行 Func<int, int, int> plus = delegate(int arg1, int arg2) { return arg1 + arg2; }; //匿名方法,本質上是一個方法,只是沒有名字,任何使用委託變數的地方 都可以使用匿名方法賦值 Console.ReadKey(); } }
上面兩種函式的命名方法實際上是同一種方法。總結起來就是,利用delegate隱藏函式名,將(引數){返回值}補全,這樣可以起到匿名的作用,但是匿名的方法無法通過方法名呼叫,只能繼續採用匿名的方式進行書寫。
我們發現這種方法並不能對我們的工作產生便利,而且這樣使用匿名的方式也太繁瑣了,所以採用lambda表示式用來代替匿名方法,所以一個lambda表示式也是定義了一個方法。
例:
class Program { static void Main(string[] args) { //Func<int, int, int> plus = delegate(int arg1, int arg2) //{ // return arg1 + arg2; //}; //Func<int, int, int> plus = (arg1, arg2) =>//lambda表示式的引數是不需要使用型別的。 //{ // return arg1 + arg2; //}; //Console.WriteLine(plus(90,60)); Func<int, int> Test2 = a => a + 1;//如果lambda表示式中只有一個引數可以不加上(),當函式體的語句只有一句的時候,我們可以不加上{}大括號,也可以不加上return語句 Func<int, int> Test3 = (a) => { return a + 1; };
Console.WriteLine(Test2(34)); Console.WriteLine(Test3(34)); Console.ReadKey(); } }
大家可以發現Lambda表示式就是一個=>符號,用來表示前面()中的引數通過它後面{}中的方法進行操作。同時lambda表示式也存在一些更簡便的寫法。(見註釋,這裡就不再囉嗦了!)上面例子執行起來大家會發現Test2和Test3返回的結果是一樣的,同樣也印證了我們Lambda表示式的一些簡單用法。