LINQ查询中的C#lambda表达式

LINQ查询中的C#lambda表达式,c#,linq,lambda,C#,Linq,Lambda,我知道循环中的lambda表达式如果使用局部变量会导致问题。(见附件) 现在有一种情况,我在LINQ查询中使用lambda表达式: var products = from product in allProducts select new { ID = product.ID, Name = product.Name, Conten

我知道循环中的lambda表达式如果使用局部变量会导致问题。(见附件)

现在有一种情况,我在LINQ查询中使用lambda表达式:

var products = from product in allProducts
               select new
               {
                  ID = product.ID,
                  Name = product.Name,
                  Content = new Func<object,string>(
                     (obj) => (GetSomeDynamicContent(obj, product))
                     )
               };

someCustomWebControl.DataSource = products;
someCustomWebControl.DataBind();
var products=来自所有产品中的产品
选择新的
{
ID=product.ID,
Name=product.Name,
内容=新功能(
(obj)=>(GetSomeDynamicContent(obj,产品))
)
};
someCustomWebControl.DataSource=产品;
someCustomWebControl.DataBind();

这样做安全吗?编译器是否总是正确地展开此表达式并确保“product”指向正确的对象?

是的,这样做是安全的。LINQ查询基本上扩展为:

private AnonType AnonMethod(Product product)
{
    return new
        {
            ID = product.ID,
            Name = product.Name,
            Content = new Func<object,string>(
                (obj) => (GetSomeDynamicContent(obj, product))
                )
        };
}

var products = allProducts.Select(AnonMethod);
someCustomWebControl.DataSource = products;
someCustomWebControl.DataBind();
private AnonType AnonMethod(产品)
{
还新
{
ID=product.ID,
Name=product.Name,
内容=新功能(
(obj)=>(GetSomeDynamicContent(obj,产品))
)
};
}
var products=所有产品。选择(AnonMethod);
someCustomWebControl.DataSource=产品;
someCustomWebControl.DataBind();
如您所见,lambda表达式捕获allProducts中每个产品的
product
变量