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 шт):

Автор решения: return

Очевидно, что null является itemsAnti, т. к. вы получаете его из FirstOrDefault, а т. к. default(<any class name>) == null, то и выбрасывается NullReferenceException. Вы получаете исходную последовательность из seacher'а, для которой свойственно мочь быть пустой; и вы из этой пустой последовательности пытаетесь получить первый элемент, если он не найден, то null, что вы и получили (это значит, что последовательность пуста).

Если бы вы использовали .NET Core с Project/PropertyGroup/Nullable равным enable (.csproj), то вы бы получили предупреждение от компилятора, что возвращаемый объект потенциально может быть null (ссылка).

→ Ссылка