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

我想避免的:

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 中:

List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
151167 次浏览

你可以试试:

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

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

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

什么版本的框架? 在3.5版本中,你大概可以使用:

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

(编辑删除更简单的版本; 我检查和 ManagementObjectCollection只实现了非通用的 IEnumerable表单)

只要 ManagementObjectCollection 实现 IEnumable < ManagementObject > ,您就可以:

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

如果没有,那么你就只能按照你现在的方式来做了。

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

您可以像下面的代码片段那样进行转换

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

从3.5开始,从 System.Collection.IEnumable 继承的任何东西都可以使用方便的扩展方法 OfType。

如果您的集合来自 ICollection 或 IEnumable,您可以这样做:

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

再简单不过了:)

你可以用

using System.Linq;

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