uso tipos tipo requiere parametros parametro objeto metodos lista genericos generico generica ejemplos crear como argumentos c# collections

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