2
런타임에 표현식을 작성하여 Expression<Func<T, object>>
의 서명이있는 타사 API로 전달하려고합니다. 아래는 제가 지금까지 가지고있는 것입니다. 이것은 참조 유형에는 잘 작동하지만 값 유형은 예외 (3 행)와 함께 나타납니다. 유형 '선택 System.Boolean'의참조 및 값 유형에 대한 속성의 표현식은 어떻게 작성합니까?
표현은 반환 형식을 사용할 수 없습니다 '으로 System.Object'
나는 이것이 내가 다루고 있지 않다 복싱 문제로 인해 있으리라 믿고있어 와.
Expression.TypeAs(property, typeof(object))
을 추가하려고 시도했지만 API는 obj=> (obj.Foo As Object)
을 생성하므로이 입력을 허용/구문 분석하지 않습니다.
누구나 어떤 유형의 필수 서명과도 일치하는 표현식을 작성하는 방법에 대한 아이디어가 있습니까?
// must be in the form of 'obj => obj.Foo', or the API wont parse
private static Expression<Func<T, object>> CreatePropertyExpression(PropertyInfo propertyInfo)
{
var instanceParam = Expression.Parameter(propertyInfo.DeclaringType, "obj");
var property = Expression.Property(instanceParam, propertyInfo);
var lambda = Expression.Lambda<Func<T, object>>(property, instanceParam); // kaboom
return (Expression<Func<T, object>>)lambda;
}