第13天:Lambda 表達式
課程簡介
今天,我們將學習 Lambda 表達式,這是 C# 中簡化函數表示的一種方式。Lambda 表達式讓您可以使用簡潔的語法來定義匿名方法(沒有名稱的方法),並常用於處理集合資料。Lambda 表達式特別適合搭配 LINQ 查詢和 委派 使用,能讓代碼更加直觀和簡潔。
學習目標
- 理解 Lambda 表達式的基本概念和語法
- 學會如何將 Lambda 表達式應用於集合操作
- 瞭解 Lambda 表達式在 LINQ 查詢中的應用
- 透過練習掌握如何使用 Lambda 表達式提高程式碼效率
課程內容
1. Lambda 表達式的基本語法
Lambda 表達式的語法如下:
1
(parameters) => expression
- parameters:輸入參數,可單一或多個。
- =>:Lambda 運算子,表示「轉換為」。
- expression:運算內容,通常是運算式或語句塊。
範例:
1
2
int[] numbers = { 1, 2, 3, 4, 5 };
var evenNumbers = numbers.Where(n => n % 2 == 0);
在這個範例中,n => n % 2 == 0
是 Lambda 表達式。它表示一個匿名方法,該方法接收一個 n
作為參數並返回 n % 2 == 0
的布林值,用於篩選陣列中的偶數。
2. 使用 Lambda 表達式操作集合
Lambda 表達式最常見的用途是搭配集合的 Where
、Select
、OrderBy
等方法操作資料。這些方法屬於 LINQ 的一部分,可以用來篩選、轉換和排序集合。
範例:
1
2
3
4
5
6
7
8
9
List<string> names = new List<string> { "Alice", "Bob", "Charlie", "David" };
// 使用 Where 來篩選名字長度大於 3 的項目
var longNames = names.Where(name => name.Length > 3);
foreach (var name in longNames)
{
Console.WriteLine(name); // 輸出 "Alice", "Charlie", "David"
}
在這個範例中,name => name.Length > 3
是 Lambda 表達式,返回名字長度是否大於 3。
3. Lambda 表達式與 LINQ 查詢
Lambda 表達式是 LINQ 查詢中非常強大的工具,您可以使用它快速對集合資料進行操作。以下是一些 LINQ 方法常用的 Lambda 表達式示例:
Select:用於轉換集合中的每個元素。
1 2 3 4 5 6 7
int[] numbers = { 1, 2, 3, 4, 5 }; var squares = numbers.Select(n => n * n); foreach (var square in squares) { Console.WriteLine(square); // 輸出 1, 4, 9, 16, 25 }
OrderBy:用於排序集合中的元素。
1 2 3 4 5 6 7
List<string> fruits = new List<string> { "Apple", "Banana", "Cherry" }; var sortedFruits = fruits.OrderBy(fruit => fruit.Length); foreach (var fruit in sortedFruits) { Console.WriteLine(fruit); // 輸出 "Apple", "Cherry", "Banana" }
Any:檢查集合中是否存在符合條件的元素。
1 2 3
List<int> numbers = new List<int> { 1, 2, 3, 4, 5 }; bool hasEven = numbers.Any(n => n % 2 == 0); Console.WriteLine(hasEven); // 輸出 True
這些方法與 Lambda 表達式結合使用,能夠大幅簡化代碼,使其更具可讀性。
4. 多行 Lambda 表達式
如果 Lambda 表達式的邏輯比較複雜,您可以使用 {}
包裹多行代碼。此時需要使用 return
關鍵字來返回結果。
範例:
1
2
3
4
5
6
7
8
9
Func<int, int, int> add = (a, b) =>
{
int result = a + b;
Console.WriteLine("Adding " + a + " and " + b);
return result;
};
int sum = add(3, 4); // 輸出 "Adding 3 and 4"
Console.WriteLine(sum); // 輸出 7
在這個範例中,Lambda 表達式內部包含了多行程式碼,並返回相加的結果。
5. 使用 Lambda 表達式作為委派
委派(Delegate)是 C# 中用來封裝方法的一種型別,您可以使用 Lambda 表達式來初始化委派。這在需要傳遞方法作為參數的情況下非常有用。
範例:
1
2
3
4
5
6
7
8
9
10
11
12
13
public delegate int Operation(int x, int y);
class Program
{
static void Main(string[] args)
{
Operation add = (x, y) => x + y;
Operation multiply = (x, y) => x * y;
Console.WriteLine(add(3, 4)); // 輸出 7
Console.WriteLine(multiply(3, 4)); // 輸出 12
}
}
在這個範例中,Operation
委派被初始化為兩個 Lambda 表達式,分別執行加法和乘法運算。
實作練習
- 使用
Where
篩選偶數- 建立一個包含多個整數的列表,並使用 Lambda 表達式篩選出偶數並顯示結果。
1 2 3 4 5 6 7 8
List<int> numbers = new List<int> { 10, 15, 20, 25, 30 }; var evenNumbers = numbers.Where(n => n % 2 == 0); Console.WriteLine("Even Numbers:"); foreach (var num in evenNumbers) { Console.WriteLine(num); // 輸出 10, 20, 30 }
- 使用
Select
計算平方- 使用
Select
將列表中所有數字的平方值計算出來並顯示。
1 2 3 4 5 6 7 8
int[] numbers = { 1, 2, 3, 4, 5 }; var squares = numbers.Select(n => n * n); Console.WriteLine("Squares:"); foreach (var square in squares) { Console.WriteLine(square); // 輸出 1, 4, 9, 16, 25 }
- 使用
- 使用 Lambda 表達式作為委派
- 定義一個委派,並使用 Lambda 表達式分別進行加法和減法運算。
1 2 3 4 5 6 7 8 9 10 11 12 13
public delegate int Operation(int a, int b); class Program { static void Main(string[] args) { Operation add = (a, b) => a + b; Operation subtract = (a, b) => a - b; Console.WriteLine("Addition: " + add(10, 5)); // 輸出 15 Console.WriteLine("Subtraction: " + subtract(10, 5)); // 輸出 5 } }
教學重點
- 了解 Lambda 表達式的語法和基本概念。
- 學會使用 Lambda 表達式操作集合資料。
- 掌握在 LINQ 中使用 Lambda 表達式來篩選、轉換、排序資料。
- 使用 Lambda 表達式作為委派,提高程式碼的靈活性和簡潔性。
在下一節中,我們將深入探討 LINQ 查詢語法,並學習如何高效地查詢和操作資料集合。