【发布时间】:2011-12-17 18:38:42
【问题描述】:
正如标题所示,我想做以下事情,但编译器不让我这样做:
public class MyClass
{
private List<SomeSupertype> myList;
public MyClass<T> (ICollection<T> elements) where T : SomeSupertype
{
myList = new List<SomeSuperType> ();
foreach (SomeSupertype element in elements) {
myList.Add (element);
}
}
}
不知何故,似乎不可能将泛型参数添加到本身不是泛型的类的构造函数中。请注意,MyClass 应该是非泛型类型,因为一旦构建了 MyClass,客户端就不必区分不同类型的 MyClass。
谁能帮我解决这个问题?这可能吗?它肯定是在 Java 中的 :)
编辑:我忘了提到我使用的是 .NET 3.5,因此不支持协变泛型。
【问题讨论】:
-
如果您使用的是 .NET 4,为什么不让非泛型构造函数采用
IEnumerable<SomeSupertype>?IEnumerable1` 是协变的,所以IEnumerable<T>可以转换为IEnumerable<SomeSupertype>每当T : SomeSupertype时。 -
@Anton:经过一些改写和解释,这似乎值得回答
-
是的,协方差可以解决问题。我可能应该提到我正在使用 .NET 3.5