c# - tipos - La conversión más rápida de la colección a la lista<T>
parametros genericos c# (7)
¿Qué versión del marco? Con 3.5, podría presumiblemente usar:
List<ManagementObject> managementList = managementObjects.Cast<ManagementObject>().ToList();
(editado para eliminar una versión más simple; lo revisé y ManagementObjectCollection
solo implementa el formulario IEnumerable
no genérico)
Lo que me gustaría evitar:
ManagementClass m = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection managementObjects = m.GetInstances();
List<ManagementObject> managementList = new List<ManagementObject>();
foreach(ManagementObject m in managementObjects){
managementList.Add(m);
}
¿No hay una manera de obtener esa colección en una lista que se parece a algo así como:
List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
Desde 3.5, cualquier cosa heredada de System.Collection.IEnumerable tiene el conveniente método de extensión OfType disponible.
Si su colección es de ICollection o IEnumerable, puede hacer esto:
List<ManagementObject> managementList = ManagementObjectCollection.OfType<ManagementObject>().ToList();
No se puede encontrar de ninguna manera más simple. :)
Podrías usar
using System.Linq;
Eso le dará un método de extensión ToList <> para ICollection <>
Siempre que ManagementObjectCollection implemente IEnumerable <ManagementObject> puede hacer lo siguiente:
List<ManagementObject> managementList = new List<ManagementObjec>(managementObjects);
Si no lo hace, entonces estás estancado haciéndolo de la forma en que lo haces.
Tu podrías intentar:
List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.ToArray());
No estoy seguro si .ToArray () está disponible para la colección. Si usa el código que publicó, asegúrese de inicializar la Lista con la cantidad de elementos existentes:
List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.Count); // or .Length
puedes convertir como el fragmento de código siguiente
Collection<A> obj=new Collection<return ListRetunAPI()>
managementObjects.Cast<ManagementBaseObject>().ToList();
es una buena elección
Puede mejorar el rendimiento inicializando la capacidad de la lista:
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;
}
}