2015-06-17 124 views
4

的表達我有這樣的方法:創建返回一個對象

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

+0

可以直接給拉姆達爲Expression變量。 –

+0

@NickBailey不,你不能直接指定'Expression',因爲它不是委託類型。 –

回答

2

您可以創建一個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 
{ 
} 
+0

我想讓代碼看起來像......漂亮! –

+0

很高興幫助! –