【问题标题】:Method not throwing an exception despite the conditions尽管有条件,方法不会引发异常
【发布时间】:2014-03-23 14:55:19
【问题描述】:

这是我用来从用户那里检索 MAC 地址的方法。

为了重现 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;
}

话虽如此,尽管我的异常处理程序可以引发错误,但我无法让它引发错误,尽管我的输出是这样的:

注意:应该说:Error Message: Invalid PCI MAC

有没有办法检查那个“空白”是什么?显然它不是"",或string.Empty,或null,或null

【问题讨论】:

  • 试试string.IsNullOrWhiteSpace()?因为它可能是一个(或多个)空间。
  • 您可以设置一个断点并检查该值。也就是说,mObject 中是否可能没有项目?是否有可能有 个值但 PNPDeviceIDs 中没有一个包含 "PCI\\"
  • @ChiChan 我也试过了——不要扔。 @canon,让我试试mObject
  • 想一想,string.Empty不应该被退回来代替吗?
  • @theGreenCabbage,这取决于使用情况。但是想象一下,如果你想检查一个空的用户输入并且它是一个文本区域。该人可以键入换行符、空格和制表符,检查所有这些非常烦人。在这种情况下,您想使用IsNullOrWhiteSpace

标签: c# exception network-programming


【解决方案1】:

为了重现 MAC 地址未检索到的情况,我 故意禁用我的网卡。这不应该返回 MAC 地址,使用这种方法:...

会不会是禁用卡后,下面的条件一直是false

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

在这种情况下,foreach 循环内没有任何反应,函数返回 string.Empty?

【讨论】:

    【解决方案2】:

    您可以使用.Lenght 确定

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

    【讨论】:

    • 谢谢,这是个好主意。
    • string.IsNullOrWhiteSpace() 可能会稍微好一点,请参阅@ChiChan 的评论。
    • 可以的,谢谢@AlexD
    猜你喜欢
    • 2020-05-08
    • 1970-01-01
    • 1970-01-01
    • 2018-09-18
    • 1970-01-01
    • 2020-01-14
    • 1970-01-01
    • 2014-05-04
    相关资源
    最近更新 更多