我如何离开(演员?,转换?):
IEnumerable<Square>
到
IEnumerable<Shape>
答案 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。但如果你能够升级,这可能是升级的理由。