2010-08-20 4 views
2

로컬 변수를 사용하면 루프 내의 람다식이 문제를 일으킬 수 있음을 알고 있습니다.LINQ 쿼리에서 C# 람다 식

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

이 안전 할을 : 나는 LINQ 쿼리 내에서 람다 식을 사용하고, 여기서

이 지금은 상황이 (http://www.jaylee.org/post/2008/11/18/Lambda-Expression-and-ForEach-loops.aspx 참조)? 컴파일러는 항상이 표현식을 적절히 확장하여 "제품"이 올바른 객체를 가리키는 지 확인합니까?

답변

2

예, 안전하게 할 수 있습니다. 귀하의 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(); 

는 람다 식 allProduct으로 각 제품에 대한 product 변수를 캡처합니다.