Рейтинг:
17
OriginalGriff
Если поисковик содержит нули, то вы можете игнорировать их довольно легко:
List<string> list = searcher2.Get().Where(m => m != null).Cast<ManagementObject>().Select(mo2 => mo2["Name"].ToString()).Where(name => name.Contains("(COM")).ToList();
Но вам не нужно приводить коллекцию к ManagementObjects, так как метод Get уже возвращает их коллекцию:
MSDN[
^]
GrooverFromHolland
Если я проверяю значение null после searcher2.Get(), то получаю ошибку: ManagementObjectCollection не содержит определения Where.
Если я проверяю значение null после приведения<<managementobject>>() mo2 все еще является нулевым.
Канавка
OriginalGriff
Извините, вы правы: ManagementObjectCollection реализует IEnumeable, но не универсальную версию, необходимую для методов Linq. Вам нужен актерский состав, чтобы получить его в общую коллекцию.
Но если он проходит через приведение, то он все равно не является нулевым ( если бы это было так, вы бы получили исключение "недопустимое приведение").
Это означает, что не "mo2" является нулевым, а индекс "Name" возвращает null.
Вы можете доказать это очень легко:
...Бросание&ЛТ;managementobject и GT;().Выберите(мо2 =&ГТ; (мо2["наименование"] ?? "").Метод toString()).Где(...
Уберут исключение - и, наверное, все пункты!
И быстрая проверка на MSDN:
https://msdn.microsoft.com/en-us/library/system.management.managementobject_properties%28v=vs.110%29.aspx?f=255&MSPPError=-2147217396
Говорит, что нет никакого свойства "Name" для объекта ManagementObject или для его базовых классов.
GrooverFromHolland
Вы абсолютно правы, я попробую другой подход, чтобы получить список USB-последовательных устройств.
Спасибо Вам за ваши усилия,
Канавка
OriginalGriff
Всегда пожалуйста!