2014-12-06 64 views
0

在下面的WMI查询中,如果proptery为空,那么我的代码错误。当属性不存在时,如何让代码返回“”?例如queryObj [“帮助电话”]为空,所以我的代码出错了,但我希望它继续。WMI查询空属性

ManagementObjectSearcher searcherSoftware = new ManagementObjectSearcher("root\\CIMV2", "Select * from Win32_Product"); 

foreach (ManagementObject queryObj in searcherSoftware.Get()) 
{ 
    ItemsUnderControlObject TemporarySoftware = new ItemsUnderControlObject(); 
    TemporarySoftware.sType = "Software"; 
    TemporarySoftware.sAssignmentType = queryObj["AssignmentType"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); //http://stackoverflow.com/questions/22583873/get-names-from-string-values/22583919?noredirect=1#22583919 
    TemporarySoftware.sCaption = queryObj["Caption"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
    TemporarySoftware.sDescription = queryObj["Description"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
    TemporarySoftware.sHelpLink = queryObj["HelpLink"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
    TemporarySoftware.sHelpTelephone = queryObj["Help Telephone"].ToString().Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
} 

回答

1

可以创建一个辅助方法:

private static string GetNameContents(ManagementObject queryObj, string propertyName) 
{ 
    object propertyValue = queryObj[propertyName]; 
    if (propertyValue == null) 
     return String.Empty; 
    string propertyString = propertyValue.ToString(); 
    return propertyString.Length == 0 
     ? String.Empty 
     : propertyString.Split(new[] { "Name=" }, StringSplitOptions.None).Last().Trim('"'); 
} 

并且如下使用它:

TemporarySoftware.sAssignmentType = GetNameContents(queryObj, "AssignmentType"); 
TemporarySoftware.sCaption = GetNameContents(queryObj, "Caption"); 
+0

线对象的PropertyValue = queryObj将[PropertyName];仍然跳转到catch语句。为什么我不知道。前述描述是“未找到”,就好像该属性完全不存在一样。 – user1438082 2014-12-06 14:29:03

+0

明白了 - 只要在代码中加入try catch,并返回“”,如果它进入catch语句。 – user1438082 2014-12-06 14:45:43