ManagementObjectCollection không thực hiện Indexer, nhưng có bạn có thể bạn chức năng mở rộng FirstOrDefault nếu bạn đang sử dụng LINQ nhưng geeks người đang sử dụng .net 3 hoặc sớm hơn (như tôi vẫn làm việc trên 1.1) có thể sử dụng mã sau đây, nó là cách tiêu chuẩn để nhận được mục đầu tiên từ bất kỳ bộ sưu tập nào được triển khai thực hiện giao diện IEnumerable.
//TODO: Do the Null and Count Check before following lines
IEnumerator enumerator = collection.GetEnumerator();
enumerator.MoveNext();
ManagementObject mo = (ManagementObject)enumerator.Current;
Sau đây là hai cách khác nhau để lấy ManagementObject từ bất kỳ chỉ số
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");
}
HOẶC
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");
}
Nguồn
2013-11-27 00:47:29
tôi cần thêm 'OfType' ... 'ManagementObject mo = queryCollection.OfType < ManagementObject>(). Đầu tiên(); ' –
Tôi không thấy' FirstOrDefault() 'trong' ManagementObject', hoặc chỉ 'OfType(). FirstOrDefault()' làm việc cho tôi –
Jack
Cho bất kỳ ai là nhầm lẫn như tôi, có một lỗi đánh máy trong câu trả lời này. Nó nên đọc: 'ManagementObject mo = queryCollection.OfType(). FirstOrDefault()' –
SGS