有没有人知道是否可以将具有特定类型参数(例如Bar)的通用类型转换为具有Bar基类型的类型参数(在我的情况下为object)的同一通用类型。如果可能,如何实现?
我想做的是拥有Foo<object>
的集合,但能够添加具有更具体类型参数的Foos。
谢谢
有没有人知道是否可以将具有特定类型参数(例如Bar)的通用类型转换为具有Bar基类型的类型参数(在我的情况下为object)的同一通用类型。如果可能,如何实现?
我想做的是拥有Foo<object>
的集合,但能够添加具有更具体类型参数的Foos。
谢谢
// Using:
public class Foo {} // Base class
public class Bar : Foo {} // Subclass
// Code:
List<Foo> list = new List<Foo>();
HashSet<Foo> hash = new HashSet<Foo>();
list.Add(new Bar());
list.Add(new Foo());
hash.Add(new Bar());
"Bar"是"Foo"的一种特定类型,因此将其添加到Foo集合中是完全合法的。
然而,在.NET 4之前和使用协变的out修饰符之前,您无法执行以下操作:
IEnumerable<Foo> list = new List<Bar>(); // This isn't supported in .NET 3.5...
IList<T>
中,T既出现在参数中(Add方法),又出现在返回值中(索引器),所以既不是协变也不是逆变的。但是在IEnumerable<T>
中可以实现。 - R. Martinho Fernandes在C# 4.0中是可以实现的!
您应该了解协变性。
Foo<Bar>
添加到Collection<Foo<Object>>
中。这需要C# 4的协变性支持。 - Roman Boiko