【问题标题】:how to cast/convert a Collection<T> to an Collection<U>如何将 Collection<T> 转换/转换为 Collection<U>
【发布时间】:2013-04-10 08:47:35
【问题描述】:

有没有一种简单的方法来做到这一点使用循环进行白化

我的课程是什么样子的

class T
{
    //some stuff
}

class U
{
     //some stuff

    public U(T myT)
    {
         //some stuff
    }
}

我在研究中发现了以下方法 List.ConvertAll 但它只适用于 List 现在我想知道是否有人知道为 Collections 实现此目的的方法。

我更喜欢通用解决方案,但任何能以高性能方式解决此问题的方法。

【问题讨论】:

    标签: c#-4.0 generics collections type-conversion


    【解决方案1】:

    您可以为此使用 LINQ 选择:

    var enumerableOfU = collectionOfT.Select(t => new U(t));
    

    如果你想多次枚举enumerableOfU,你应该在Select之后附加.ToList().ToArray()

    请注意,这个内部仍然使用循环,但你不必自己写。

    【讨论】:

    • 我认为 LINQ 不是很高效吗?当然,目前这对我来说并不重要,但我的名单会增长
    • @WiiMaxx LINQ 查询比 for 循环慢,一般来说并不慢,显然,由于 LINQ 的工作方式导致构建额外的中间对象,它会更昂贵,但一般来说并不昂贵。先问问自己是否需要这种性能,如果需要,只需在 for 循环中完成即可。
    • @WiiMaxx:LINQ 增加了一个小的常量开销。换句话说,如果您的集合中的项目数量增加,开销不会增加。
    • @WiiMaxx LINQ 是懒惰的,因为如果您最终没有使用完整的结果,则成本非常低。这本身可能是一个非常有趣的属性,在某些情况下可以带来巨大的性能提升,尽管 LINQ 在一般情况下比 for 循环更昂贵。
    • @WiiMaxx:是的,但它很可能更像是 5 毫秒——如果它甚至那么多的话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 1970-01-01
    • 2014-01-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多