표현의 나무를 사용하여 반영 Func을
private static Action<Foo> Compile(Transformation transformation)
{
var fooParameter = Expression.Parameter(typeof(Foo));
var changePropertyValue = Expression.Constant(transformation);
var transformProperty = Expression.Property(changePropertyValue, "Transform");
var transfromCall = Expression.Call(transformProperty, ?
}
transformProperty를 어떻게 호출 할 수 있습니까?
EDIT : 푸 (컴파일 시간이라고한다)이 필요 지정되지 않은 속성 값이 변환의 변환 속성을 사용하여 형질 전환되어야한다 :
public class Foo {
public object Value { get; set; }
}
그래서, 예를 들어 손으로 쓴 어디 TProperty 문자열은 다음과 같습니다.
Foo foo = ... // coming from an external source
Transformation<string> tranformation = ... // coming from an external source
foo.Value = transformation.Transform((string)foo.Value);
외부 어셈블리에서 정의 된대로 정확한 변환 유형을 알지 못합니다. 따라서 문자열 대신 int 또는 다른 것이 될 수 있습니다.
Foo foo = ... // coming from an external source
TransformationBase transformation = ... // coming from an external source
Action<Foo> transform = Compile(transformation);
transform(foo); // should transform foo.Value using the Transform property of 'transformation'
참고 : 내가 호출 할 수 있도록 주어진 변화에 대한 작업을 컴파일 표현의 나무를 사용하려는 이유 나는 변환이 토론을 명확히하기 위해 TransformationBase에서 상속했다. 당신이하려고하지만 난 당신의 의도를 이해한다면 어떤
나는 그 질문을 정말로 이해하지 못한다. 'Foo'와'TProperty'의 관계는 무엇입니까? '변환'과 '변환'의 관계는 무엇입니까? '변환 '클래스의'Compile' 메소드가 있습니까? 표현식 트리를 사용하고 있습니까? 아니면 표현식 트리를 어떻게 사용하고 있습니까? –
코드의 아주 작은 예를 제공하면 이해하기가 훨씬 쉬울 것입니다. 예를 들어,'행동'이 실제로해야 할 일이 있습니다. –
@BenAaronson :'컴파일 '은'변환'과'Foo' 밖에 있습니다. 내 추가 설명이 명확 해지기를 바랍니다. –
Dejan