2014-02-21 96 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 –