首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Expression<TValue>转换为Expression<Object>

如何将Expression<TValue>转换为Expression<Object>
EN

Stack Overflow用户
提问于 2014-12-08 07:27:58
回答 1查看 170关注 0票数 0

如何将Expression<Func<TViewModel, TValue>>转换为Expression<Func<TViewModel, Object>>

我有一个功能:

代码语言:javascript
复制
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’

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-08 07:43:12

为了将值类型作为对象返回,您必须将值类型框起来。Convert方法可以为您做到这一点。

代码语言:javascript
复制
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,因为它是一种值类型。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27353285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档