.net 如何转换IEnumerable<;子类>;到IEnumerable<;家长阶级>;

.net 如何转换IEnumerable<;子类>;到IEnumerable<;家长阶级>;,.net,collections,ienumerable,.net,Collections,Ienumerable,我如何从(演员?、转换?)开始: IEnumerable 到 IEnumerable var shapes=squares.Cast(); var shapes=squares.Cast(); 如果您使用的是低于.NET 4.0的版本,则必须使用: IEnumerable squares=新列表(); //填满藏品 IEnumerable shapes=squares.Cast(); .NET 4.0引入了新的协方差和逆变特性,允许您直接进行转换: IEnumerable<Square

我如何从(演员?、转换?)开始:

IEnumerable

IEnumerable
var shapes=squares.Cast();
var shapes=squares.Cast();

如果您使用的是低于.NET 4.0的版本,则必须使用:

IEnumerable squares=新列表();
//填满藏品
IEnumerable shapes=squares.Cast();
.NET 4.0引入了新的协方差和逆变特性,允许您直接进行转换:

IEnumerable<Square> squares = new List<Square>();
IEnumerable<Shape> shapes = (IEnumerable<Shape>)squares;
IEnumerable squares=新列表();
IEnumerable形状=(IEnumerable)正方形;

如果您使用的是低于.NET 4.0的版本,则必须使用:

IEnumerable squares=新列表();
//填满藏品
IEnumerable shapes=squares.Cast();
.NET 4.0引入了新的协方差和逆变特性,允许您直接进行转换:

IEnumerable<Square> squares = new List<Square>();
IEnumerable<Shape> shapes = (IEnumerable<Shape>)squares;
IEnumerable squares=新列表();
IEnumerable形状=(IEnumerable)正方形;

如果您使用的是.NET 4.0,则不必这样做

起自(加强调):

多态性使您能够将派生的实例分配给Base类型的变量。类似地,由于IEnumerable(T)接口的类型参数是协变的,您可以将
IEnumerable
的实例分配给
IEnumerable
类型的变量


既然您在问这个问题,我想您还没有使用.NET4.0。但如果您能够升级,这可能是升级的原因。

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

起自(加强调):

多态性使您能够将派生的实例分配给Base类型的变量。类似地,由于IEnumerable(T)接口的类型参数是协变的,您可以将
IEnumerable
的实例分配给
IEnumerable
类型的变量


既然您在问这个问题,我想您还没有使用.NET4.0。但如果您能够升级,这可能是升级的原因。

这是哪个版本的.NET?这是哪个版本的.NET?
var shapes = squares.Cast<Shape>();
IEnumerable<Square> squares = new List<Square>();

// Fill the collection

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