2011-08-25 56 views
1

我創建了一個信息庫方法具有以下簽名:創建無限表達式參數的方法?

T Get<TProperty>(int id, Expression<Func<T, TProperty>> include) 

這工作得很好,但我想擴展它採取無限數量的包含。我不能簡單地使用參數,因爲每個包含都會返回一個不同的TProperty。

有沒有一個很好的解決方法,或者我必須創建幾個重載爲1,2或3包括例如?

+0

在對象不同的TProperty類型有關?或完全分開的類型? –

+0

他們不同。 –

回答

1

如果TProperty類型可能不同,並且如果你想讓它們具有不同的類型,那麼你需要多次重載。

T Get<TProperty>(int id, Expression<Func<T, TProperty>> include) { ... } 
T Get<TProperty1, TProperty2>(int id, Expression<Func<T, TProperty1>> include1, Expression<Func<T, TProperty2>> include2) 

OR你可以使用:

T Get(int id, params Expression<Func<T, object>>[] includes) 

,並依靠Func鍵泛型委託的協方差,但你不得不處理你失去了一下類型的事實安全。

由於Func是返回類型的協方差,這意味着如果您的委託期望返回對象,您仍然可以將它傳遞給一個具有較窄返回類型的委託(儘管警告,協方差值類型不是共同兼容的與對象,只有引用類型)。

0

你已經發布的代碼不會讓你返回不同的TProperty但只有類型,你會在運行時指定爲<TProperty>

你可以使用PARAMS和使用的,而不是通用型