我想获取本地IList中提到的一些属性的WMI值。我通过从queryObj.Proerties中获取值来进行WMI查询并获取PropertyData []中的所有属性值。
我正在准备一个内部联接Linq查询,因为我只对我本地创建的列表中的属性名感兴趣,但它正在抛出NullrefernceException。模具Linq查询不能在数组上工作,或者我需要在访问此对象属性进行比较之前在Linq查询中初始化此PropertData对象?
请帮助我,因为我发现这很奇怪,浪费了很多时间。 以下是代码段:
IDictionary<string, IList<string>> biosWmiAttributes = new Dictionary<string, IList<string>>();
biosWmiAttributes["Win32_BIOS"] = new List<string>{"Availability",
"BatteryStatus",
"Description",
"DeviceID",
"EstimatedRunTime",
"Name",
"Status",
"PowerManagementSupported"};
ManagementObjectSearcher searcher = new ManagementObjectSearcher("root\\CIMV2", "SELECT * FROM Win32_BIOS");
foreach (ManagementObject queryObj in searcher.Get())
{
bios = new Dictionary<string, string>();
StringBuilder biosCharacteristics = new StringBuilder();
PropertyData[] wmiAttributes = new PropertyData[100];
queryObj.Properties.CopyTo(wmiAttributes, 0);
var some = from biosAttribute in biosWmiAttributes["Win32_BIOS"]
join wmiAttribute in wmiAttributes on biosAttribute equals wmiAttribute.Name into biosAttributes
select new {Name=biosAttributes};
}
答案 0 :(得分:2)
PropertyData[] wmiAttributes = new PropertyData[100];
queryObj.Properties.CopyTo(wmiAttributes, 0);
问题是,您在数组中分配100
个元素,其中实际大小不是100.当Linq
查询尝试访问您的数组时,您将获得NullReferenceException
。
将其更改为以下内容:
PropertyData[] wmiAttributes = queryObj.Properties
.Cast<PropertyData>()
.ToArray();
另请查看What is a NullReferenceException, and how do I fix it?了解详情。