C # лямбда-выражение в запросе LINQ - PullRequest
2 голосов
/ 20 августа 2010

Я знаю, что лямбда-выражения внутри циклов могут вызвать проблемы, если они используют локальные переменные. (см. http://www.jaylee.org/post/2008/11/18/Lambda-Expression-and-ForEach-loops.aspx)

Теперь у меня есть ситуация, когда я использую лямбда-выражение в запросе LINQ:

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();

Это безопасно сделать? Будет ли компилятор всегда правильно расширять это выражение и обеспечивать, чтобы «product» указывал на правильный объект?

1 Ответ

2 голосов
/ 20 августа 2010

Да, это безопасно. Ваш запрос 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();

Как видите, лямбда-выражение захватывает переменную product для каждого продукта во всех продуктах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...