【问题标题】:Creating an Expression that returns an object创建返回对象的表达式
【发布时间】:2015-06-17 01:14:39
【问题描述】:

我有这个方法:

public R TranslateExpression<R>(Expression exp)
       where R : DbRequest
{
           //...
}

在另一个类中我有以下方法:

public void Persist(E entity)
{
     Expression expr = Expression.Return(entity); //Does not compile, but I'm looking for something like this

     PersistRequest request = TranslateExpression<PersistRequest>(expr);
}

如何创建一个简单地返回实例的Expression

类似这样的:() =&gt; { return entity; }

【问题讨论】:

  • 您可以将 lambda 直接分配给 Expression 变量。
  • @NickBailey 不,您不能直接分配给Expression,因为它不是委托类型。

标签: c# .net lambda expression


【解决方案1】:

您可以创建一个Expression&lt;Func&lt;E&gt;&gt;,然后在调用该表达式后使用 lambda 表达式返回您的实体。

public void Persist<E>(E entity)
{
    Expression<Func<E>> expr = () => entity;    
    PersistRequest request = TranslateExpression<PersistRequest>(expr);
}

public R TranslateExpression<R>(Expression exp)
       where R : DbRequest
{
}

但是,此时您的 TranslateExpression 方法并不是特别有用,因为您已经失去了表达的力量。除非您在 TranslateExpression 内部做一些特别的事情,否则它可能更适合以下签名:

public R TranslateExpression<R, E>(Expression<Func<E>> exp)
       where R : DbRequest
{
}

【讨论】:

  • 我希望代码看起来像...漂亮!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多