2014-02-21 130 views
0

這是我用來從我的用戶檢索MAC地址的方法。方法不會拋出異常

要重現一個MAC地址不能檢索的場景,我故意禁用了我的網卡。 ,

public static string returnMAC1() 
{ 
    try 
    { 
     ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select MACAddress, PNPDeviceID FROM Win32_NetworkAdapter WHERE MACAddress IS NOT NULL AND PNPDEVICEID IS NOT NULL"); 
     ManagementObjectCollection mObject = searcher.Get(); 

     foreach (ManagementObject obj in mObject) 
     { 
      string pnp = obj["PNPDeviceID"].ToString(); 
      if (pnp.Contains("PCI\\")) 
      { 
       string mac = obj["MACAddress"].ToString(); 
       mac = mac.Replace(":", string.Empty); 

       if (string.IsNullOrEmpty(mac)) 
       { 
        throw new System.Exception("Invalid PCI MAC"); 
       } 

       return mac; 
      } 
     } 
     return string.Empty; 
    } 
    catch (Exception ex) 
    { 
     Console.WriteLine("Error Message: " + ex.Message); 
    } 
    return string.Empty; 
} 

與此說,儘管地方我的異常處理程序拋出一個錯誤,我無法得到它拋出一個錯誤,儘管我的輸出是這樣的:這不應該返回一個MAC地址,使用這個方法:

enter image description here

注:應該說:Error Message: Invalid PCI MAC

有什麼辦法來檢查「空白」是什麼?顯然它不是""string.Emptynullnull

+0

嘗試'string.IsNullOrWhiteSpace()'?因爲它可能是一個(或更多)空間。 –

+0

您可以設置一個斷點並檢查該值。也就是說,是否有可能在'mObject'中沒有項目?是否有可能存在_are_值,但是沒有一個「PNPDeviceID」包含「PCI \\」? – canon

+0

@ChiChan我也嘗試過 - 沒有投擲。 @canon,讓我試試'mObject' – theGreenCabbage

回答

2

要重現其中MAC地址不會被檢索的情況下,我 故意禁用我的網卡。這不應該返回一個MAC地址 ,使用這種方法:禁用卡後...

難道說,下面的條件始終false

if (pnp.Contains("PCI\\")) 

在這種情況下,什麼也沒有發生內foreach循環和函數返回string.Empty

+0

好點..你建議我對我的代碼做出什麼改變? – theGreenCabbage

+0

你是對的!看看這個:http://puu.sh/752ot/b1c373760d.png – theGreenCabbage

0

可以使用.Lenght以確保

if (string.IsNullOrEmpty(mac) || mac.Trim().Length == 0) 
{ 
    throw new System.Exception("Invalid PCI MAC"); 
} 
+0

謝謝,這是一個好主意。 – theGreenCabbage

+0

'string.IsNullOrWhiteSpace()'可能稍微好一些,請參閱@ChiChan的評論。 – AlexD

+0

它可以,謝謝@AlexD –