La plus rapide de Convertir de la Collecte à la Liste des<T>
Ce que je voudrais é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'est-ce pas là une façon d'obtenir cette collection dans une Liste qui ressemble à quelque chose comme:
List<ManagementObject> managementList = new List<ManagementObjec>(collection_array);
- Veuillez nous dire quel framework que vous utilisez. 2.0 a une solution différente de 3,5
Vous devez vous connecter pour publier un commentaire.
Ce que la version du framework? Avec 3.5 vous pourriez probablement utiliser:
(édité pour supprimer version plus simple, je l'ai vérifié et
ManagementObjectCollection
n'implémente que la non-génériqueIEnumerable
forme)Vous pouvez utiliser
Qui vous donnera un ToList<> la méthode d'extension pour ICollection<>
ToList()
"? .... Google .... DOH! Je peux ne semblent jamais n'oubliez pas d'inclureusing System.Linq;
managementObjects.Cast<ManagementBaseObject>().ToList();
est un bon choix.Vous pourriez améliorer les performances en pré-initialisation de la capacité de la liste:
Vous pourriez essayer:
Vous ne savez pas si .ToArray() est disponible pour la collecte.
Si vous utilisez le code que vous avez posté, assurez-vous d'initialiser la Liste avec le nombre d'éléments existants:
Tant que ManagementObjectCollection implémentant IEnumerable<ManagementObject> vous pouvez le faire:
Si elle ne le fait pas, alors vous êtes coincé, faire de la même manière que vous le faites.
Depuis 3.5, rien hérité de Système.Collection.IEnumerable a la pratique de la méthode d'extension OfType disponibles.
Si votre collection est de ICollection ou IEnumerable, il vous suffit de faire ceci:
Ne pouvez pas trouver un moyen plus simple. : )
vous pouvez convertir comme ci-dessous extrait de code