2
假設我有以下功能如何傳遞表達式樹的默認參數?
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想傳遞默認參數等的OrderBy = E => e.ID
,使得如果沒有定義該參數時,默認被排序的表達ID。
這怎麼可能?
假設我有以下功能如何傳遞表達式樹的默認參數?
Dal.Person.GetAllByAge<T>(int iAge, Expression<Func<Person, T>> OrderBy)
我想傳遞默認參數等的OrderBy = E => e.ID
,使得如果沒有定義該參數時,默認被排序的表達ID。
這怎麼可能?
有兩個問題在這裏:
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);
}
哦,我錯過了泛型參數!最好與超負荷一起去。 – 2011-04-16 22:40:54
很好的答案,謝謝:) – Karim 2011-04-16 23:18:56