嵌套泛型

3

我之前问过这个问题,但是由于我的提问不够清晰,所以没有得到正确的答案。

如果我有一个返回 ObservableColletion<T> 的方法,我该如何在另一个泛型方法中使用它呢?

应该怎么做?

method2<ObservableCollection<T>>(){} 

我正在尝试创建一个通用的resultEventArgs,将Ado.NET Dataservices查询的结果传递给所有订阅者。在其中,我想要传递强类型的EntityCollection [Ado.NET 1.5生成]。

所以,是的,我的问题被用ObservableCollection来表述,因为我不想引起整个ado.net dataservices混淆。

谢谢 Dave

1个回答

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... 不太美观。


Marc,我接受了这个答案,因为它揭示了事情的真相和我在MSDN上看到的“位置”。它看起来很混乱,但是对于我140个实体中的每一个类都进行扩展,肯定也同样痛苦。如果我学习这个,我认为我可以使我的resultEventArgs类多态化。另一种选择是假设返回类型并将其强制转换为实体,然后方法/属性将可用,但我认为那样我就走了一些不安全的道路。 - DavidA

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接