J'essaie d'accéder à la gestion des assurances dans ManagementObjectCollection sans utiliser de déclaration de foresach, peut-être que je manque quelque chose, mais je ne peux pas comprendre comment le faire, je dois faire quelque chose comme ce qui suit:
ManagementObjectSearcher query = new ManagementObjectSearcher( "select Name, CurrentClockSpeed from Win32_Processor"); ManagementObjectCollection queryCollection = query.Get(); ManagementObject mo = queryCollection[0];
4 Réponses :
GestionObjectCollection implémente iEnumérable ou icollection, donc soit Vous devez iTER ITER ITER via iEnumerable (c'est-à-dire pourach) ou copier un tableau via l'ICollection.
Cependant, comme il prend en charge IEnumerable, vous pouvez utiliser LINQ: P>
ManagementObject mo = queryCollection.OfType<ManagementObject>().FirstOrDefault()
Je devais ajouter detype code> ...
GestionObject Mo = QueryCollection.Oftype
Je ne vois pas firstordfault () code> dans
GestionObject code> soit, seul
detype
Pour quiconque est aussi confus que moi, il y a une faute de frappe dans cette réponse. Il devrait lire: GestionObject Mo = QueryCollection.Oftype
Vous manquez probablement le casting:
ManagementObject mo = (ManagementObject)queryCollection[0];
-1 Pour une erreur d'île, ne peut pas accéder à la gestionObjectCollection avec l'indexation du tableau. Voici une capture d'écran de mon erreur: i.imgur.com/fbvxea2.png
Vous ne pouvez pas appeler directement LINQ de GestionObjectCollection (ni un index entier). Vous devez la jeter à Ienumerable en premier:
var queryCollection = from ManagementObject x in query.Get() select x; var manObj = queryCollection.FirstOrDefault();
GestionObjectCollection ne met pas implémente les indexeurs, mais oui, vous pouvez votre fonction d'extension de débutFault si vous utilisez LINQ mais les geeks qui utilisent .NET 3 ou plus tôt (comme moi toujours fonctionnant sur 1.1) peuvent utiliser le code suivant, c'est une manière standard de Obtenir un premier article de n'importe quelle collection Mise en œuvre interface iEnumerable.
private ManagementObject GetItem(ManagementObjectCollection collection, int index) { //TODO: do null handling int currentIndex = 0; foreach (ManagementObject mo in collection) { if (currentIndex == index) { return mo; } currentIndex++; } throw new ArgumentOutOfRangeException("Index out of range"); }