嵌套泛型

时间:2009-06-21 14:17:34

标签: c# generics observablecollection

之前我曾问过这个问题,但我没有把问题说得对,所以错过了答案。

如果我有一个返回ObservableColletion<T>的方法,我将如何在另一个通用方法中使用它。

method2<ObservableCollection<T>>(){} 

是要走的路。

我正在尝试创建一个通用的resultEventArgs,它将Ado.NET Dataservices查询的结果传递给所有订阅者。在里面,我希望能够传递返回的强类型EntityCollection [Ado.NET 1.5生成]

所以是的,我的问题是措辞ObservableCollection,因为我不想让整个ado.net dataservices混淆。

干杯 戴夫

1 个答案:

答案 0 :(得分: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 ...不是很漂亮。