Biểu thức lambda là một cách ngắn gọn để viết các hàm vô danh trong C#. Chúng thường được sử dụng trong các phương thức LINQ để truy vấn và thao tác trên các collection, nhưng cũng có thể được sử dụng ở bất kỳ đâu mà delegate được chấp nhận. Dưới đây là một hướng dẫn chi tiết về cách sử dụng các biểu thức lambda trong C#.
Cú Pháp của Biểu Thức Lambda
Cú pháp cơ bản của một biểu thức lambda là:
(parameters) => expression
Hoặc cho các biểu thức phức tạp hơn có nhiều câu lệnh:
(parameters) => { statement1; statement2; ... }
Ví Dụ Cơ Bản
1. Biểu Thức Lambda Đơn Giản
Biểu thức lambda đơn giản với một tham số:
Func<int, int> square = x => x * x;
int result = square(5); // result = 25
2. Biểu Thức Lambda Với Nhiều Tham Số
Biểu thức lambda với nhiều tham số:
Func<int, int, int> add = (x, y) => x + y;
int sum = add(3, 4); // sum = 7
3. Biểu Thức Lambda Trả Về void
Biểu thức lambda không trả về giá trị (void
):
Action<string> greet = name => Console.WriteLine($"Hello, {name}!");
greet("Alice"); // Output: Hello, Alice!
4. Biểu Thức Lambda Với Nhiều Câu Lệnh
Biểu thức lambda với nhiều câu lệnh sử dụng khối lệnh:
Func<int, int, int> multiplyAndAdd = (x, y) =>
{
int product = x * y;
int sum = x + y;
return product + sum;
};
int result = multiplyAndAdd(3, 4); // result = 19
Sử Dụng Biểu Thức Lambda Với LINQ
LINQ (Language Integrated Query) là một trong những nơi biểu thức lambda được sử dụng phổ biến nhất.
1. Lọc Dữ Liệu Với Where
Lọc các số chẵn từ một danh sách số nguyên:
List<int> numbers = new List<int> { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
var evenNumbers = numbers.Where(n => n % 2 == 0).ToList();
// evenNumbers = { 2, 4, 6, 8, 10 }
2. Chuyển Đổi Dữ Liệu Với Select
Chuyển đổi một danh sách số nguyên thành danh sách các bình phương của chúng:
var squares = numbers.Select(n => n * n).ToList();
// squares = { 1, 4, 9, 16, 25, 36, 49, 64, 81, 100 }
3. Sắp Xếp Dữ Liệu Với OrderBy
và OrderByDescending
Sắp xếp danh sách số nguyên theo thứ tự giảm dần:
var sortedNumbers = numbers.OrderByDescending(n => n).ToList();
// sortedNumbers = { 10, 9, 8, 7, 6, 5, 4, 3, 2, 1 }
4. Nhóm Dữ Liệu Với GroupBy
Nhóm các số theo số dư khi chia cho 3:
var groupedByRemainder = numbers.GroupBy(n => n % 3)
.Select(group => new { Remainder = group.Key, Numbers = group.ToList() })
.ToList();
Biểu Thức Lambda Trong Các Delegate Tùy Chỉnh
Bạn cũng có thể sử dụng biểu thức lambda trong các delegate tùy chỉnh.
public delegate int MathOperation(int x, int y);
MathOperation add = (x, y) => x + y;
MathOperation subtract = (x, y) => x - y;
int additionResult = add(5, 3); // additionResult = 8
int subtractionResult = subtract(5, 3); // subtractionResult = 2
Biểu Thức Lambda Trong Các Sự Kiện
Biểu thức lambda có thể được sử dụng để đăng ký các sự kiện.
public class Button
{
public event Action OnClick;
public void Click()
{
OnClick?.Invoke();
}
}
Button button = new Button();
button.OnClick += () => Console.WriteLine("Button clicked!");
button.Click(); // Output: Button clicked!
Tổng Kết
Biểu thức lambda trong C# cung cấp một cách viết ngắn gọn và linh hoạt để tạo các hàm vô danh. Chúng thường được sử dụng trong LINQ để thực hiện các thao tác truy vấn và xử lý dữ liệu một cách rõ ràng và hiệu quả. Biểu thức lambda cũng có thể được sử dụng trong các delegate, sự kiện, và bất kỳ đâu mà delegate được chấp nhận, giúp cải thiện sự ngắn gọn và dễ đọc của mã nguồn.
Comments