Tôi đang bối rối về phạm vi của biến lambda, lấy ví dụ như sauPhạm vi của biến lambda trong C# là gì?
var query =
from customer in clist
from order in olist
.Where(o => o.CustomerID == customer.CustomerID && o.OrderDate == // line 1
olist.Where(o1 => o1.CustomerID == customer.CustomerID) // line 2
.Max(o1 => o1.OrderDate) // line 3
)
select new {
customer.CustomerID,
customer.Name,
customer.Address,
order.Product,
order.OrderDate
};
Trong dòng 1 Tôi có khai báo một biến lambda 'o' có nghĩa là tôi không thể khai báo nó một lần nữa trong dòng 2 (hoặc ít nhất là trình biên dịch phàn nàn nếu tôi cố gắng) Nhưng nó không phàn nàn về dòng 3 mặc dù 'o1' đã tồn tại?
Phạm vi của biến lambda là gì?
Bạn có câu trả lời bên dưới, tôi chỉ muốn chia sẻ một gợi ý đơn giản, thực tế: khi phạm vi không rõ ràng khi đọc mã và khi phạm vi quan trọng, hoặc tránh sự mơ hồ bằng cách sử dụng các tên biến khác nhau; hoặc viết ra lambdas của bạn dưới dạng dài, sử dụng dấu ngoặc nhọn, làm cho chúng trông giống như các hàm - tâm trí và mắt của hầu hết các lập trình viên tạo ra một sự phân biệt rõ ràng hơn khi bạn nhìn thấy các dấu ngoặc nhọn truyền thống. –