【问题标题】:Conversion from List<T> to array T[]从 List<T> 到数组 T[] 的转换
【发布时间】:2009-03-10 07:13:48
【问题描述】:

有没有一种将强类型的List&lt;T&gt; 转换为相同类型的数组的捷径,例如:List&lt;MyClass&gt;MyClass[]

我的意思是一个方法调用,或者至少短于:

MyClass[] myArray = new MyClass[list.Count];
int i = 0;
foreach (MyClass myClass in list)
{
    myArray[i++] = myClass;
}

【问题讨论】:

    标签: c# .net arrays linq list


    【解决方案1】:

    尝试使用

    MyClass[] myArray = list.ToArray();
    

    【讨论】:

    • 这是一个浅拷贝,对吗?从docs不清楚...
    【解决方案2】:
    List<int> list = new List<int>();
    int[] intList = list.ToArray();
    

    这是你的解决方案吗?

    【讨论】:

      【解决方案3】:

      List&lt;T&gt; 上使用ToArray()

      【讨论】:

        【解决方案4】:
        list.ToArray()
        

        会做的。详情请见here

        【讨论】:

          【解决方案5】:

          你可以简单地使用ToArray()扩展方法

          例子:

          Person p1 = new Person() { Name = "Person 1", Age = 27 };
          Person p2 = new Person() { Name = "Person 2", Age = 31 };
          
          List<Person> people = new List<Person> { p1, p2 };
          
          var array = people.ToArray();
          

          According to Docs

          使用Array.Copy()复制元素,这是一个O(n)操作, 其中 n 是计数。

          【讨论】:

            【解决方案6】:

            一种可能的避免解决方案,它使用多个 CPU 内核并预计运行速度会更快,但它的执行速度却慢了大约 5 倍:

            list.AsParallel().ToArray();
            

            【讨论】:

              【解决方案7】:

              使用 HPCsharp nuget 包提供的多个处理器内核将速度提高一倍:

              list.ToArrayPar();
              

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2021-11-26
                • 2012-02-24
                相关资源
                最近更新 更多