【问题标题】:How do I convert a IEnumerable<SubClass> to IEnumerable<ParentClass>如何将 IEnumerable<SubClass> 转换为 IEnumerable<ParentClass>
【发布时间】:2010-08-02 12:20:32
【问题描述】:

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

IEnumerable<Square>

IEnumerable<Shape>

【问题讨论】:

  • 这是哪个版本的 .NET?

标签: .net collections ienumerable


【解决方案1】:

如果您使用的是低于 .NET 4.0 的版本,那么您将不得不使用 IEnumerable.Cast

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

// Fill the collection

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

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

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

【讨论】:

    【解决方案2】:
    var shapes = squares.Cast<Shape>();
    

    【讨论】:

      【解决方案3】:

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

      来自Covariance and Contravariance in Generics(已添加重点):

      多态性使您能够将 Derived 的实例分配给 Base 类型的变量。同样,由于 IEnumerable(T) 接口的类型参数是协变的,您可以将IEnumerable&lt;Derived&gt; 的实例分配给IEnumerable&lt;Base&gt; 类型的变量...

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多