2013-02-05 2 views
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; 
} 

답변

2

캐스트/변환 추가

return Expression.Lambda<Func<T, object>>(
    Expression.Convert(property, typeof(object)), instanceParam);