2009-10-15 4 views
7

손으로 람다 식을 만들 때 '매개 변수가 범위에 들어 가지 않습니다'예외가 발생합니다.람다 매개 변수가 범위에 있지 않습니다. 이진 람다 식을 구축하는 동안

내가 뭘 잘못하고 있는지에 대한 아이디어가 있습니까?

public class OtherType 
    { 
     public string First_Name { get; set; } 
     public string Last_Name { get; set; } 

    } 
    static void Main(string[] args) 
     { 

      Expression<Func<OtherType, bool>> l2 = 
       p => p.First_Name == "Bob"; 
      l2.Compile(); // Works 


      PropertyInfo property = 
       typeof(OtherType).GetProperty("First_Name"); 

      ParameterExpression para = 
       Expression.Parameter(typeof(OtherType), "para"); 

      ConstantExpression right = 
       Expression.Constant("Bob", typeof(string)); 

      MemberExpression left = 
       Expression.Property(Expression.Parameter(typeof(OtherType), "para"), property); 

      BinaryExpression binary = 
       Expression.MakeBinary(ExpressionType.Equal, left, right); 

      Expression<Func<OtherType, bool>> l = 
       Expression.Lambda<Func<OtherType, bool>>(binary, new ParameterExpression[] { para }); 

      l.Compile(); // Get a 'Lambda Parameter not in scope' exception 

} 

답변

11

동일한 매개 변수 개체를 다시 사용해야합니다. 나는 그들에게 이름과 일치하는 것이 나을 알고

MemberExpression left = Expression.Property(para, property); 

하지만 그것이 작동 그냥 방법이다 :(

:

MemberExpression left = Expression.Property 
    (Expression.Parameter(typeof(OtherType), "para"), property); 

은 그것이 있어야 : 그래서 당신이있어 어디에

전혀 위안이라면 처음에는 수작업으로 표현한 나무를 거의 구하지 못합니다. 잠시 동안 맹세해야합니다. 다른 한편, 추운 날에 Marc Gravell은 신중하게 숨을 내쉴 수 ​​있다고 생각합니다. 그의 호흡은 완벽하고 서리가 내린 표현 트리 코드의 형태로 나옵니다 ...

+0

마침내 무엇이 잘못되고 있는지 깨닫기 위해 이것을 12 번 읽어야했습니다. 감사합니다 존 : D –

+0

3 년 후 : 많은 감사 !!! :) – schglurps

관련 문제