Избавиться от цикла foreach - C#
Формулировка задачи:
Получаю серийный номер флешки:
Можно как то тут избавиться от цикла?
Идея такова, что вывожу в comboBox все подключенные флешки и после того как выберу определенную, нужно показать ее серийный номер
ManagementObjectSearcher theSearcher = new ManagementObjectSearcher("SELECT * FROM Win32_DiskDrive WHERE InterfaceType='USB'");
foreach (ManagementObject currentObject in theSearcher.Get())
{
if (currentObject["Name"].ToString() == nameList[comboBox1.SelectedIndex])
{
ManagementObject theSerialNumberObjectQuery = new ManagementObject("Win32_PhysicalMedia.Tag='" + currentObject["DeviceID"] + "'");
listBox1.Items.Add(theSerialNumberObjectQuery["SerialNumber"].ToString());
}
else { }
}Решение задачи: «Избавиться от цикла foreach»
textual
Листинг программы
List<string> usbList;
List<string> nameList;
public void UsbDiskList()
{
string diskName = string.Empty;
string diskPhys = string.Empty;
usbList = new List<string>();
nameList = new List<string>();
usb_select.Items.Clear();
//Получение списка накопителей подключенных через интерфейс USB
foreach (System.Management.ManagementObject drive in
new System.Management.ManagementObjectSearcher(
"select * from Win32_DiskDrive where InterfaceType='USB'").Get())
{
//Получаем букву накопителя
foreach (System.Management.ManagementObject partition in
new System.Management.ManagementObjectSearcher(
"ASSOCIATORS OF {Win32_DiskDrive.DeviceID='" + drive["DeviceID"]
+ "'} WHERE AssocClass = Win32_DiskDriveToDiskPartition").Get())
{
foreach (System.Management.ManagementObject disk in
new System.Management.ManagementObjectSearcher(
"ASSOCIATORS OF {Win32_DiskPartition.DeviceID='"
+ partition["DeviceID"]
+ "'} WHERE AssocClass = Win32_LogicalDiskToPartition").Get())
{
//Получение буквы устройства
diskName = disk["Name"].ToString().Trim();
diskPhys = drive["Name"].ToString().Trim();
usb_select.Items.Add(diskName + " (" + drive["Model"] + ")");
usbList.Add(diskName);
nameList.Add(diskPhys);
usb_select.SelectedIndex = 0;
}
}
}
}