创建一个 returns 对象的表达式

Creating an Expression that returns an object

我有这个方法:

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

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

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 只是 returns 一个实例?

像这样:() => { return entity; }.

您可以创建一个 Expression<Func<E>>,然后在调用该表达式后将 lambda 表达式用于 return 您的实体。

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
{
}