我对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/