如何将Expression<Func<TViewModel, TValue>>转换为Expression<Func<TViewModel, Object>>
我有一个功能:
static Expression<Func<TViewModel, object>> Convert<TViewModel,TValue>(Expression<Func<TViewModel, TValue>> expr)
{
var param = expr.Parameters[0];
Expression body = expr.Body;
return Expression.Lambda<Func<TViewModel, object>>(body, param);
}它适用于引用类型(string)转换,但是值类型(DateTime)对返回语句引发运行时异常:
类型'System.DateTime‘的表达式不能用于返回类型'System.Object’
发布于 2014-12-08 07:43:12
为了将值类型作为对象返回,您必须将值类型框起来。Convert方法可以为您做到这一点。
static Expression<Func<TViewModel, object>> Convert<TViewModel, TValue>(Expression<Func<TViewModel, TValue>> expr)
{
var param = expr.Parameters[0];
Expression body = expr.Body;
var convert = Expression.Convert(body, typeof(object));
return Expression.Lambda<Func<TViewModel, object>>(convert, param);
}您还说过,对于基本类型(string, int),它可以工作。它不会适用于int,因为它是一种值类型。
https://stackoverflow.com/questions/27353285
复制相似问题