我对 lambda 变量的范围感到困惑,例如以下
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
};
在第 1 行中,我声明了一个 lambda 变量“o”,这意味着我不能在第 2 行中再次声明它(或者如果我尝试这样做,至少编译器会提示) 但即使“o1”已经存在,它也不会提示第 3 行??
lambda 变量的作用域是什么?
最佳答案
括号给出了线索 - lambda 变量在它声明的范围内被捕获:
.Where(o => ... olist.Where(o1 => ...).Max(o1 => ...))
// |----------------------------------------------| scope of o
// |---------| scope of first o1
// |---------| scope of second o1
请注意,两个 o1
变量没有重叠,但它们都重叠(或隐藏)o
变量,因此不能使用相同的名称。
关于c# - C# 中 lambda 变量的作用域是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10494074/