2009-06-21 109 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