最快从集合转换为列表<T>

t3r*_*rse 67 c# collections

我想避免的:

ManagementClass m = new ManagementClass("Win32_LogicalDisk");

ManagementObjectCollection managementObjects = m.GetInstances();

List<ManagementObject> managementList = new List<ManagementObject>();

foreach(ManagementObject m in managementObjects){

    managementList.Add(m);

}
Run Code Online (Sandbox Code Playgroud)

有没有办法将该集合放入一个看起来像这样的列表:

List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 123

什么版本的框架?使用3.5你可能会使用:

List<ManagementObject> managementList = managementObjects.Cast<ManagementObject>().ToList();
Run Code Online (Sandbox Code Playgroud)

(编辑以删除更简单的版本;我检查并ManagementObjectCollection仅实现非泛型IEnumerable形式)


jac*_*ith 33

你可以用

using System.Linq;
Run Code Online (Sandbox Code Playgroud)

这将为ICollection <>提供ToList <>扩展方法

  • 我经常遇到这个问题 - "为什么没有`ToList()`"?....谷歌.... DOH!我似乎永远不会记得包含`using System.Linq;` (8认同)
  • ObjectCollection 中没有 ToList()。 (2认同)

man*_*aus 5

managementObjects.Cast<ManagementBaseObject>().ToList();是一个不错的选择。

您可以通过预初始化列表容量来提高性能:


    public static class Helpers
    {
        public static List<T> CollectionToList<T>(this System.Collections.ICollection other)
        {
            var output = new List<T>(other.Count);

            output.AddRange(other.Cast<T>());

            return output;
        }
    }
Run Code Online (Sandbox Code Playgroud)