2011-04-16 73 views
2

假設我有以下功能如何傳遞表達式樹的默認參數?

Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy) 

我想傳遞默認參數等的OrderBy = E => e.ID
,使得如果沒有定義該參數時,默認被排序的表達ID。
這怎麼可能?

回答

4

有兩個問題在這裏:

  • e => e.ID可能無效對於用於提供
  • 只能在默認參數

您可以排序工作使用常量的T做這件事:

public Whatever GetAllByAge<T>(int age, 
           Expression<Func<Person, T>> orderBy = null) 
{ 
    orderBy = orderBy ?? (Expression<Func<Person, T>>) 
         (Expression<Func<Person, int>>)(e => e.Id); 
    ... 
} 

(假設ID類型是int

...但如果T不是int投將失敗。請注意,對於「內部」部分來說,雙重強制轉換最初會告訴編譯器您想要將該lambda表達式轉換爲哪個表達式樹,而「外部」部分則是強制將其作爲T的適當表達式樹類型。

我會嘗試使用超載而不是:

public Whatever GetAllByAge(int age) 
{ 
    return GetAllByAge(age, e => e.ID); 
} 
+0

哦,我錯過了泛型參數!最好與超負荷一起去。 – 2011-04-16 22:40:54

+0

很好的答案,謝謝:) – Karim 2011-04-16 23:18:56

相關問題