Ce que j'aimerais éviter:
ManagementClass m = new ManagementClass("Win32_LogicalDisk");
ManagementObjectCollection managementObjects = m.GetInstances();
List<ManagementObject> managementList = new List<ManagementObject>();
foreach(ManagementObject m in managementObjects){
managementList.Add(m);
}
N'y a-t-il pas moyen d'obtenir cette collection dans une liste qui ressemble à ceci:
List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
Quelle version du framework? Avec 3.5, vous pouvez probablement utiliser:
List<ManagementObject> managementList = managementObjects.Cast<ManagementObject>().ToList();
(modifié pour supprimer la version la plus simple; j'ai vérifié et ManagementObjectCollection
implémente uniquement le formulaire non générique IEnumerable
)
Vous pourriez utiliser
using System.Linq;
Cela vous donnera une méthode d’extension ToList <> pour ICollection <>
managementObjects.Cast<ManagementBaseObject>().ToList();
est un bon choix.
Vous pouvez améliorer les performances en pré-initialisant la capacité de la liste:
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;
}
}
Tu pourrais essayer:
List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.ToArray());
Vous ne savez pas si .ToArray () est disponible pour la collection . Si vous utilisez le code que vous avez publié, assurez-vous d'initialiser la liste avec le nombre d'éléments existants:
List<ManagementObject> managementList = new List<ManagementObject>(managementObjects.Count); // or .Length
Depuis la version 3.5, tout ce qui est hérité de System.Collection.IEnumerable a la méthode d’extension pratique OfType disponible.
Si votre collection provient de ICollection ou IEnumerable, procédez comme suit:
List<ManagementObject> managementList = ManagementObjectCollection.OfType<ManagementObject>().ToList();
Impossible de trouver un moyen plus simple. :)
Tant que ManagementObjectCollection implémente IEnumerable <ManagementObject>, vous pouvez effectuer les opérations suivantes:
List<ManagementObject> managementList = new List<ManagementObjec>(managementObjects);
Si ce n'est pas le cas, vous êtes coincé à le faire comme vous le faites.