ZH TW CSharp Delegates Lambdas - LIHACHTETAN/ClassicUO-Bad-Newbie-CSharp-Scripts-IDE GitHub Wiki

Українська · Русский · English · Deutsch · Français · Italiano · Español · 繁體中文 · 日本語 · 한국어

委託、lambda 表達式與閉包

手冊C# · 範例UO

委託儲存特定簽名的被呼叫函數。 Action 不回傳結果,Func 回傳 1,Predicate<T> 回傳 bool。 Lambda 被寫為 arguments => expression 或塊。捕獲的變數屬於閉包,因此更改其值會影響後續呼叫。

簡單範例 (Example.cs)

請將此範例另存為 Example.cs,並與本頁其他範例分開執行。

Example.cs:

// PROJECT-EXAMPLE
System.Func<int, int> twice = value => value * 2;
System.Console.WriteLine(twice(4));

結果:

8
Func<int, int, int> add = (left, right) => left + right;
Action<string> report = text => UO.Print(text);
report($"Total={add(2, 3)}");
int count = 0;
Action next = () => count++;
next();
next();
UO.Print($"Count={count}");

當方法的簽章與委託相符時,此方法可以作為方法群組傳遞。 static-lambda 不捕獲本地上下文。對於任務返回 lambda,使用 Func<Task> 或 Func<T,Task> 並等待任務; async void 留給需要 void 的事件處理程序。

官方文件:委託、Lambda 和閉包 - Microsoft Learn。

⚠️ **GitHub.com Fallback** ⚠️