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

10-11 13:01