VieTopikKhoá học
  • Games
  • Cá nhân
Tải app
© 2026 VieTopikChính sách bảo mậtĐiều khoản sử dụngCài appEnglish
  • Trang chủ
  • Học
  • Luyện thi
  • Cẩm nang
  • Games
  • Cá nhân
C# CoreCông cụ hằng ngày
Bài 16/19
5 phút

Lambda

Bình luận
Nội dung bài · 6 mục
  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Method viết gọn bằng =>
  4. 4.Thử ngay
  5. 5.Lỗi hay gặp
  6. 6.Tóm tắt

Lọc sản phẩm đắt hơn 100.000đ, tìm món đầu tiên còn hàng: mỗi việc cần truyền một điều kiện vào method. Viết hẳn một method có tên cho mỗi điều kiện thì quá dài. Lambda cho phép viết điều kiện đó ngay tại chỗ.

Khái niệm

➡️ Lambda: một method không tên viết gọn theo dạng tham số => kết quả, dùng để truyền vào method khác hoặc gán vào biến.

📮 Func: kiểu dùng để lưu lambda có trả về, viết là Func<kiểu vào, kiểu ra>.

p => p > 100000 đọc là: "nhận p, trả về p > 100000".

Ví dụ

Func<decimal, decimal> addVat = price => price * 1.1m;
Console.WriteLine(addVat(100m));   // 110.0

List<decimal> prices = new List<decimal>
{
    5000m, 150000m, 30000m, 200000m
};

List<decimal> expensive =
    prices.FindAll(p => p > 100000);

foreach (decimal p in expensive)
{
    Console.WriteLine(p);   // 150000, 200000
}
  • Func<decimal, decimal>: nhận decimal, trả về decimal. Kiểu cuối cùng luôn là kiểu trả về.
  • addVat(100m) gọi lambda giống gọi method.
  • prices.FindAll(p => p > 100000) truyền điều kiện vào FindAll. FindAll tự chạy lambda với từng phần tử và giữ lại phần tử cho kết quả true.

Method viết gọn bằng =>

Method chỉ gồm một biểu thức thì viết gọn được bằng =>:

decimal Total(decimal price, int quantity) =>
    price * quantity;

Console.WriteLine(Total(5000m, 3));   // 15000

Viết như vậy tương đương với { return price * quantity; }.

Thử ngay

Dán vào Program.cs rồi chạy dotnet run:

Func<int, int> twice = x => x * 2;
Func<int, bool> isEven = x => x % 2 == 0;

Console.WriteLine(twice(twice(3)));
Console.WriteLine(isEven(7));

Đoán trước khi chạy: twice(twice(3)) ra 6 hay số khác?

Xem kết quả
12
False

twice(3) ra 6, rồi twice(6) ra 12. Lambda gọi lồng nhau như method bình thường.

Lỗi hay gặp

Dùng var cho lambda mà không có kiểu tham số. Compiler không biết x là kiểu gì.

// SAI — lỗi compile: không suy ra được kiểu của x
var triple = x => x * 3;
// ĐÚNG — khai báo rõ kiểu bằng Func
Func<int, int> triple = x => x * 3;

Có ngoặc { } mà quên return. Lambda có thân trong { } phải có return như method.

// SAI — lỗi compile: thiếu return
Func<int, int> discount = x => { x - 1000; };
// ĐÚNG
Func<int, int> discount = x => { return x - 1000; };

Tóm tắt

  • Lambda là method không tên: tham số => kết quả.
  • Lưu lambda bằng Func<vào, ra>, kiểu cuối là kiểu trả về.
  • Lambda thường được truyền vào method khác làm điều kiện, như FindAll.
  • Method một dòng viết gọn được bằng =>.
enumLINQ cơ bản

Bình luận

Đang tải bình luận…

Nội dung bài

  1. 1.Khái niệm
  2. 2.Ví dụ
  3. 3.Method viết gọn bằng =>
  4. 4.Thử ngay
  5. 5.Lỗi hay gặp
  6. 6.Tóm tắt