我有这种方法:

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

最佳答案

您可以创建一个Expression<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
{
}

08-04 00:49