Я пытаюсь чтобы получить доступ к ManagementObjects в ManagementObjectCollection без использования оператора foreach, может быть, я что-то упустил, но не могу понять, как это сделать, мне нужно сделать что-то вроде следующего:
ManagementObjectSearcher query = new ManagementObjectSearcher(
"select Name, CurrentClockSpeed from Win32_Processor");
ManagementObjectCollection queryCollection = query.Get();
ManagementObject mo = queryCollection[0];
ManagementObjectCollection реализует IEnumerable или ICollection, так что либо вы должны перебирать его через IEnumerable (т.е. foreach), либо копировать в массив через ICollection.
Однако, поскольку он поддерживает IEnumerable, вы можете использовать Linq:
ManagementObject mo = queryCollection.OfType<ManagementObject>().FirstOrDefault()
OfType
требуется, поскольку ManagementObjectCollection поддерживает IEnumerable, но не IEnumerable из T.
Вы вероятно, отсутствует приведение:
ManagementObject mo = (ManagementObject)queryCollection[0];
...так как я не думаю, что ManagementObjectCollection является универсальным (и поэтому не имеет типизированного индексатора.)