2009-06-21 145 views
3

我之前已經問過這個問題,但是我沒有正確回答問題,所以錯過了答案。嵌套的泛型

如果我有一個方法返回一個ObservableColletion<T>那麼我將如何在另一個通用方法中使用它。

method2<ObservableCollection<T>>(){} 

是要走的路。

我想做一個通用的resultEventArgs,它會將Ado.NET Dataservices查詢的結果傳遞給所有訂閱者。裏面,我想不能通過強類型返回的EntityCollection [Ado.NET 1.5生成]

所以是的,我的問題措辭ObservableCollection因爲我不想讓整個ado.net dataservices混淆。

乾杯 戴夫

回答

4

這取決於;你想指定項目類型,還是集合類型?如果你只是想指定的項目,那麼T涉及只是項目:

public ObservableCollection<T> SomeMethod<T>() 
{ 
    var data = new ObservableCollection<T>(); 
    data.Add(default(T)); // or whatever 
    return data; 
} 

然後你可以使用ObservableCollection<Order> orders = SomeMethod<Order>()等,如果你需要指定集合類型,你可能需要更多的泛型類型...

public TList SomeMethod<TList, T>() 
    where TList : class, IList<T>, new() 
{ 
    var data = new TList(); 
    data.Add(default(T)); // or whatever 
    return data; 
} 

但是,調用它會更棘手。除非列表是參數,否則它不能進行類型推斷,這意味着在調用它時不得不同時指定TListT ...不是很漂亮。

+0

Marc, 接受這個,因爲它給出了事實的真相以及我通過某些MSDN看到的'where'。它確實看起來很混亂,但是對於我的140個實體中的每一個來說,類的xplosion肯定會很痛苦。 如果我研究這個,我想我可以根據需要將我的resultEventArgs類設置爲多態。另一種方法是假設返回類型並將其轉換爲實體,然後方法/屬性將可用,但是我認爲我正在航行一些狡猾的路徑。 – DavidA 2009-06-21 14:44:26