런타임에 표현식 트리를 빌드 할 때 코드 이 나오지 않습니다.표현식 트리가 런타임 코드를 방출합니까?
ParameterExpression p = Expression.Parameter (typeof (string), "s"); MemberExpression stringLength = Expression.Property (p, "Length"); ConstantExpression five = Expression.Constant (5); BinaryExpression comparison = Expression.LessThan (stringLength, five); Expression<Func<string, bool>> lambda= Expression.Lambda<Func<string, bool>> (comparison, p); Func<string, bool> runnable = lambda.Compile();
이 코드는 늘 IL 될 : 그것은
는 지금이 코드를 가지고 말할 수 ... ... 좋아
런타임에 .NET 코드를 표현하는 방법? 물론 될 것입니다! (어쩌면 마지막 줄은 컴파일 할 때까지 코드를 내 보내지 않을 것이다.하지만 코드가 나오는 첫 번째 줄은!)
그래서 나는 무엇을 저장하고 있는가?
좋아요. 그래서 처음 5 행은 코드를 내보내고 마지막 하나는 ... 큰 문제가 아닙니다.
내가 무엇이 누락 되었습니까? 전체 사진을 보여 주실 수 있습니까?
컴파일 할 때 표현식 트리가 (DynamicMethod를 사용하여) IL로 변환됩니다. – leppie
@leppie와 첫 번째 5 줄은 IL에 없습니까? –
음, 처음에는 컴파일 된 정상적인 코드입니다. 익스프레션에는 일리노이에 대한 개념이 없습니다. 추상화입니다. 일리노이로 내보낼 수 있지만 그렇게 할 필요는 없습니다 (예 : 자신의 x86 ASM 또는 GPU 코드 등을 내보낼 수 있음). – leppie