c# – 创建一个返回对象的Expression

我有这个方法:

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?

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

最佳答案 您可以创建表达式< Func< E>>然后在调用表达式后使用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
{
}
点赞