「我們教導新手的方式,往往是基於我們自己歷經的學習路徑(C# 1.0 → 2.0 → 3.0…),但學習者並不需要重走這條歷史路徑。應從他們的基礎與認知模型出發,傳遞現代 C# 的核心概念。」
— Bill Wagner (Microsoft C# MVP, Regional Director)
資深開發者習慣按版本演進順序教學:委派 → 匿名方法 → Lambda → LINQ。但對零基礎學習者,這增加了認知負荷。Bjarne Stroustrup 早於 1999 年即指出 C++ 教學應「直接教授最重要的特性,而非先教 C 再轉 C++」。C# 同理。
var numbers = new List<int>(Enumerable.Range(-20, 200));
numbers.RemoveAll(n => n > 30);
bool allLessThan40 = numbers.TrueForAll(n => n < 40);
逐步引導:
RemoveAll 接受一個條件 n => n > 30,移除符合條件的元素。n 是參數,箭頭右邊是回傳 bool 的運算式。TrueForAll 驗證所有元素是否滿足條件。int,因為集合是 List<int>。Predicate<T> 要求回傳 bool,故 n > 30 自動視為 bool 運算式。若寫 n => n.ToString() 則編譯失敗(型別不符)。Lambda 表達式 = 將程式碼作為資料傳遞給另一個方法,延遲執行。RemoveAll 內部對每個元素套用該邏輯並移除符合者。此時暫不講委派、匿名方法、運算式樹等底層細節——隱藏複雜度,降低門檻。
C# 語言快速演進,教學若仍沿用十年前的脈絡,反而阻礙新人上手。優秀的教學是「為學習者設計最短路徑」,而非「重走專家的長征路」。