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
)它会在return语句上抛出运行时异常:
'System.DateTime'类型的表达式不能用于返回类型'System.Object'
答案 0 :(得分:1)
您必须输入值类型才能将值类型作为对象返回。 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
,因为它是一种值类型。