傳統 C# 教學常按版本順序:1.0 基礎 → 2.0 泛型/迭代器 → 3.0 LINQ/Lambda → 4.0 動態/命名參數… 但對零基礎學習者,這條路徑效率低落。Bjarne Stroustrup 早在 1999 年即指出 C++ 教學應「直接教授最重要的特性,而非先教 C 再轉 C#」。同理,C# 教學應聚焦**現代慣用寫法**,而非歷史演進。
Lambda 表達式是現代 C# 的核心表達能力,涵蓋委派、類型推論、函數式風格。以下範例展示其直觀威力:
var numbers = new List<int>(Enumerable.Range(-20, 200));
numbers.RemoveAll(n => n > 30); // 移除所有 > 30 的元素
bool allSmall = numbers.TrueForAll(n => n < 40); // 驗證全部 < 40
| 疑問 | 核心解釋 |
|---|---|
參數 n 型別是什麼? | 編譯器根據 List<int> 推斷為 int。 |
為什麼沒寫 return? | 運算式主體隱含回傳;n > 30 為 bool 運算式,符合 Predicate<int>。 |
若寫 n => n.ToString() 會怎樣? | 編譯錯誤:string 不符合 bool。 |
RemoveAll、Where、Select 等高階函數。同樣策略適用於:
from n in numbers where n > 0 select n * 2 — 先寫出查詢,再解釋延遲執行與 IEnumerable。await httpClient.GetStringAsync(url) — 先展示非阻塞流程,再講 Task、狀態機。record Person(string Name, int Age); — 先體驗不可變資料模型,再談結構相等性。採用「由用法導向本質」的教學法,能大幅縮短 C# 入門曲線,培養出能直接解決實務問題的開發者。