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

时间:2008-10-09 15:51:38

标签: 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);

}

是否有办法将该集合放入类似于以下内容的列表中:

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

7 个答案:

答案 0 :(得分:119)

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

List<ManagementObject> managementList = managementObjects.Cast<ManagementObject>().ToList();

(已编辑以删除更简单的版本;我已选中且ManagementObjectCollection仅实现非通用IEnumerable表单)

答案 1 :(得分:31)

您可以使用

function NewNum(){
  $("#num1").html("<i class='fa fa-spinner'/>");
}  

那会给你一个ToList&lt;&gt; ICollection的扩展方法&lt;&gt;

答案 2 :(得分:2)

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;
        }
    }

答案 3 :(得分:1)

你可以尝试:

List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.ToArray());

不确定.ToArray()是否可用于集合。 如果您确实使用了您发布的代码,请确保使用现有元素的数量初始化List:

List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.Count);  // or .Length

答案 4 :(得分:0)

只要ManagementObjectCollection实现IEnumerable&lt; ManagementObject&gt;你可以这样做:

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

如果没有,那么你就像你正在做的那样坚持做。

答案 5 :(得分:0)

从3.5开始,从System.Collection.IEnumerable继承的任何东西都有方便的扩展方法OfType。

如果您的收藏来自ICollection或IEnumerable,您可以这样做:

List<ManagementObject> managementList = ManagementObjectCollection.OfType<ManagementObject>().ToList();

找不到更简单的方法。 :)

答案 6 :(得分:-2)

您可以转换如下代码段

Collection<A> obj=new Collection<return ListRetunAPI()>