我想避免的事情:
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);
答案 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()>