Conversion la plus rapide de la collection à la liste

Ce que je voudrais éviter:

ManagementClass m = new ManagementClass("Win32_LogicalDisk"); ManagementObjectCollection managementObjects = m.GetInstances(); List managementList = new List(); foreach(ManagementObject m in managementObjects){ managementList.Add(m); } 

N’y a-t-il pas un moyen d’obtenir cette collection dans une liste qui ressemble à quelque chose comme:

 List managementList = new List(collection_array); 

Quelle version du framework? Avec 3.5, vous pourriez probablement utiliser:

 List managementList = managementObjects.Cast().ToList(); 

(modifié pour supprimer la version simplifiée; j’ai vérifié et ManagementObjectCollection implémente uniquement le formulaire IEnumerable non générique)

Vous pourriez utiliser

 using System.Linq; 

Cela vous donnera une méthode d’extension ToList <> pour ICollection <>

managementObjects.Cast().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 CollectionToList(this System.Collections.ICollection other) { var output = new List(other.Count); output.AddRange(other.Cast()); return output; } } 

Tu pourrais essayer:

 List managementList = new List(managementObjects.ToArray()); 

Vous ne savez pas si .ToArray () est disponible pour la collection. Si vous utilisez le code que vous avez posté, assurez-vous d’initialiser la liste avec le nombre d’éléments existants:

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

Tant que ManagementObjectCollection implémente IEnumerable , vous pouvez faire:

 List managementList = new List(managementObjects); 

Si ce n’est pas le cas, alors vous êtes bloqué comme vous le faites.

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 d’ICollection ou d’IEnumerable, vous pouvez simplement faire ceci:

 List managementList = ManagementObjectCollection.OfType().ToList(); 

Je ne trouve aucun moyen plus simple. 🙂

vous pouvez convertir comme ci-dessous l’extrait de code

 Collection obj=new Collection