ManagementObject возвращает исключение NullReferenceException
Пробую получить значение установленного антивируса на компьютере
const string SECURITY = @"root\SecurityCenter2";
using var Anti = new ManagementObjectSearcher(SECURITY, "SELECT * FROM AntiVirusProduct");
using var itemsAnti = Anti.Get().OfType<ManagementObject>().FirstOrDefault();
Console.WriteLine(itemsAnti["displayName"]?.ToString());
Но получаю ошибку: Ссылка на объект не указывает на экземпляр объекта.в itemsAnti["displayName"]?.ToString()
Попробовал сделать проверку:
if (itemsAnti.Properties.Count != 0)
или
if (itemsAnti["displayName"] != null)
Всё ровно возвращает исключение NullReferenceException
Ответы (1 шт):
Очевидно, что null является itemsAnti, т. к. вы получаете его из FirstOrDefault, а т. к. default(<any class name>) == null, то и выбрасывается NullReferenceException. Вы получаете исходную последовательность из seacher'а, для которой свойственно мочь быть пустой; и вы из этой пустой последовательности пытаетесь получить первый элемент, если он не найден, то null, что вы и получили (это значит, что последовательность пуста).
Если бы вы использовали .NET Core с Project/PropertyGroup/Nullable равным enable (.csproj), то вы бы получили предупреждение от компилятора, что возвращаемый объект потенциально может быть null (ссылка).