将LambdaExpression转换为带有装箱返回值的类型化Expression<Func<T, object>>

4
我想构建以下表达式:
Expression<Func<T, object>>

我目前有以下代码:

public class Strategy<T>
{
    private static Expression<Func<T, object>> GetIt(PropertyInfo propertyInfo)
    {
        ParameterExpression parameter = Expression.Parameter(typeof(T));
        MemberExpression property = Expression.Property(parameter, propertyInfo);
        Type funcType = typeof(Func<,>).MakeGenericType(typeof(T), typeof(object));

        //next line fails: can't convert int to object
        LambdaExpression lambda = Expression.Lambda(funcType, property, parameter);

        Expression<Func<T, object>> retval = (Expression<Func<T, object>>)lambda;
        return retval;
    }
}

我的PropertyInfo对象的返回类型是“int”。 怎样在我的Expression中使用装箱?


2
Expression<Func<T, object>> retval = Expression.Lambda<Func<T, object>>(Expression.Convert(property, typeof(object)), parameter); - user4003407
1个回答

0
public class ExpressionGetter<T>
    {
        public static Expression<Func<T, Object>> Get(PropertyInfo pInfo)
        {
            ParameterExpression parameter = Expression.Parameter(typeof(T));
            MemberExpression property = Expression.Property(parameter, pInfo);
            Type funcType = typeof(Func<,>).MakeGenericType(typeof(T), typeof(object));

            //next line fails: can't convert int to object

            LambdaExpression lambda;
            if (typeof (T).IsClass == false && typeof (T).IsInterface == false)
                lambda = Expression.Lambda(funcType, Expression.Convert(property, typeof (Object)), parameter);
            else
                lambda = Expression.Lambda(funcType, property, parameter);

            return (Expression<Func<T, object>>)lambda;
        }
    }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接