C#将Foo <bar>转换为Foo <object> </object> </bar>

时间:2010-04-07 16:56:38

标签: c# generics casting covariance

是否有人知道是否可以将具有特定类型参数(例如Bar)的泛型类型转换为相同的泛型类型,其中type参数是Bar的基本类型(例如我的对象中的对象)。并且,如果有可能,它将如何完成?

我想要做的是拥有Foo<object>的集合,但能够添加具有更多特定类型参数的Foos。

谢谢

4 个答案:

答案 0 :(得分:3)

您可以拥有一个添加了子类的基类型的集合。例如,以下内容将起作用:

// 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 modifier之前,你不能这样做:

IEnumerable<Foo> list = new List<Bar>(); // This isn't supported in .NET 3.5...

答案 1 :(得分:2)

使用List(T)或Array的ConvertAll方法。

http://msdn.microsoft.com/en-us/library/73fe8cwf.aspx

答案 2 :(得分:2)

是的,可以在C#4.0中使用!

您应该查看covariance

答案 3 :(得分:0)