如何将Expression <tvalue>转换为Expression <object> </object> </tvalue>

时间:2014-12-08 07:27:58

标签: c# lambda expression

如何将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'

1 个答案:

答案 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,因为它是一种值类型。