ManagementObjectCollection non implementa indicizzatori, ma sì è possibile che si funzione di estensione FirstOrDefault se si sta utilizzando LINQ, ma i geek che stanno usando .net 3 o versioni precedenti (come me ancora lavorando su 1.1) può usare il seguente codice, è un modo standard per ottenere il primo elemento da qualsiasi interfaccia implementata da IEnumerable.
//TODO: Do the Null and Count Check before following lines
IEnumerator enumerator = collection.GetEnumerator();
enumerator.MoveNext();
ManagementObject mo = (ManagementObject)enumerator.Current;
seguito sono due modi diversi per recuperare ManagementObject da qualsiasi indice
private ManagementObject GetItem(ManagementObjectCollection collection, int index)
{
//TODO: do null handling
IEnumerator enumerator = collection.GetEnumerator();
int currentIndex = 0;
while (enumerator.MoveNext())
{
if (currentIndex == index)
{
return enumerator.Current as ManagementObject;
}
currentIndex++;
}
throw new ArgumentOutOfRangeException("Index out of range");
}
O
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");
}
fonte
2013-11-27 00:47:29
avevo bisogno di aggiungere '' OfType' ... mo ManagementObject = queryCollection.OfType < ManagementObject>(). First(); ' –
Non vedo' FirstOrDefault() 'in' ManagementObject', solo 'OfType(). FirstOrDefault()' ha funzionato per me –
Jack
Per chi è confuso come me, c'è un errore di battitura in questa risposta. Dovrebbe essere visualizzato: 'ManagementObject mo = queryCollection.OfType(). FirstOrDefault()' –
SGS