List 20:Lambda 變體完整範例
delegate int NoArg();
delegate int OneArg(int onlyOne);
delegate int TwoArgs(int first, int second);
delegate void NoRetVal();
class Program
{
static void Main()
{
NoArg sample1 = () => 0; // 無參數
OneArg sample2 = (x) => x * 2; // 單參數帶括號
OneArg sample3 = (int x) => x * 2; // 單參數顯式型別
OneArg sample4 = x => x * 2; // 單參數省略括號
TwoArgs sample5 = (x, y) => x * y; // 多參數
TwoArgs sample6 = (int x, int y) => x * y; // 多參數顯式型別
OneArg sample7 = (x) => { return x * 2; }; // 語句本體
OneArg sample8 = (int x) => { return x * 2; }; // 語句本體+型別
NoRetVal sample9 = () => Console.WriteLine("Hello!"); // void 語句本體
}
}
變體關鍵規則速記
| 形式 | 規則 |
() => ... | 無參數必須寫空括號 |
(x) => ... | 單參數括號可省略:x => ... |
(x, y) => ... | 多參數必須括號、逗號分隔 |
(int x) => ... | 可選擇性指定參數型別 |
{ return ...; } | 語句本體需大括號、return、分號 |
() => Method() | void 方法調用作為語句本體 |
下章預告:型別推斷與委派類別庫
- 深入「類型推斷」:編譯器如何從委派簽章推斷 Lambda 參數/回傳型別。
- 實戰
Action<T>、Func<T, TResult> 等框架內建委派類型應用。
- 掌握這兩點,Lambda 表達式才算真正精通。