我如何将IEnumerable <subclass>转换为IEnumerable <parent class> </parent class> </subclass>

时间:2010-08-02 12:20:33

标签: .net collections ienumerable

我如何离开(演员?,转换?):

IEnumerable<Square>

IEnumerable<Shape>

3 个答案:

答案 0 :(得分:4)

如果您使用的是低于.NET 4.0的任何内容,那么您将不得不使用IEnumerable.Cast

IEnumerable<Square> squares = new List<Square>();

// Fill the collection

IEnumerable<Shape> shapes = squares.Cast<Shape>();

.NET 4.0引入了新的Covariance和Contravariance功能,允许您直接进行转换:

IEnumerable<Square> squares = new List<Square>();
IEnumerable<Shape> shapes = (IEnumerable<Shape>)squares;

答案 1 :(得分:1)

var shapes = squares.Cast<Shape>();

答案 2 :(得分:0)

如果您使用的是.NET 4.0,则不必使用。

来自Covariance and Contravariance in Generics(强调补充):

  

Polymorphism允许您将Derived实例分配给Base类型的变量。类似地,因为IEnumerable(T)接口的类型参数是协变的,所以可以将IEnumerable<Derived>的实例分配给IEnumerable<Base> 类型的变量...

既然你问这个问题,我猜你还没有使用.NET 4.0。但如果你能够升级,这可能是升级的理由。