Lambda表達式的各種變體
Lambda表達式有各種變體。特別是在參數只有一個的情況下,因為在語法上可以省略參數兩邊的括弧,全面把握起來會比較困難。所以,下面的代碼給出幾種主流的變體的寫法。
1using System;
2
3delegate int NoArg();
4delegate int OneArg(int onlyOne);
5delegate int TowArgs(int first, int second);
6delegate void NoRetVal ();
7
8class Program
9{
10 static void Main(string[] args)
11 {
12 NoArg sample1 = () => 0;
13 OneArg sample2 = (x) => x * 2;
14 OneArg sample3 = (int x) => x * 2;
15 OneArg sample4 = x => x * 2;
16 TowArgs sample5 = (x, y) => x * y;
17 TowArgs sample6 = (int x, int y) => x * y;
18 OneArg sample7 = (x) => { return x * 2; };
19 OneArg sample8 = (int x) => { return x * 2; };
20 NoRetVal sample9 = () => Console.WriteLine("Hello!");
21 }
22}
23
List20 Lambda表達式的各種變體
sample1 = () => 0
在寫沒有參數的Lambda表達式的時候,要寫上沒有參數的空的括號。
sample2 = (x) => x * 2
有參數的情況下,用括號把參數表括上是最基本的寫法。
sample3 = (int x) => x * 2
當然,如果能夠明確指定參數的類型更好。
sample4 = x => x * 2
僅當參數只有一個的時候,參數兩邊的括弧可以省略。
sample5 = (x, y) => x * y
參數有多個的時候,用逗號分隔
sample6 = (int x, int y) => x * y
參數有多個的時候,也可以指定類型
sample7 = (x) => { return x * 2; }
Lambda語句的例子
sample8 = (int x) => { return x * 2; }
Lambda語中也可以指定類型
sample9 = () => Console.WriteLine("Hello!")
沒有返回值的情況,寫成調用void型返回值的方法的形式。
下期預告
介紹到這裡,Lambda表達式的大部分內容已經介紹過了。僅僅運用本章的知識,就能夠使代碼發生很大的質的變化了。
然而,如果說要完全理解了Lambda表達式的話,僅僅這樣的話還為時尚早。
實際上,推斷被省略了的類型聲明的“類型推斷”的麻煩事還在後頭呢。下一章,就來說說類型推斷。同時,也將會討論一下使用Lambda表達式的代理類型在類庫中的使用方法。例如,本章中的例子裡就用到了Action類型和Func類型。