2014-12-06 3 views
0

프로 시저가 비어있는 경우 아래 WMI 쿼리에서 내 코드 오류입니다. 속성이 없을 때 어떻게 코드를 반환 할 수 있습니까? 예를 들어, queryObj [ "Help Telephone"]은 null이므로 내 코드는 오류가 발생하지만 계속 진행하길 원합니다.빈 속성에 대한 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 문으로 이동합니다. 왜 내가 몰라. ex 설명은 해당 속성이 전혀 존재하지 않는 것처럼 "찾을 수 없음"입니다. – user1438082

+0

- 코드 주위에 try catch를 놓고 catch 문을 입력하면 ""를 반환하십시오. – user1438082