正确的方法从try / catch返回值

时间:2016-06-15 17:39:37

标签: c# ip-address

如果字符串是有效的IP地址,我有一个名为ValidIP()的方法,它接受string并返回true。示例1在try / catch语句后返回true,因为我不想在返回值时捕获异常。示例2在测试字符串之后直接返回值,并在try指令中等待异常。这是个人偏好的问题还是更正确或更安全/更不容易崩溃的一个例子?

示例1

private bool ValidIP(string ipAddress)
{
    try
    {
        IPAddress.Parse(ipAddress);
    }
    catch
    {
        return false;
    }
    return true;
}

示例2

private bool ValidIP(string ipAddress)
{
    try
    {
        IPAddress.Parse(ipAddress);
        return true;
    }
    catch
    {
        return false;
    }
}

2 个答案:

答案 0 :(得分:4)

据我所知,两种方法都是等价的。然而,解决此问题的更优雅的方法是使用IPAddress.TryParse方法:

public static bool TryParse(string ipString,out IPAddress address)

该方法返回truefalse,具体取决于它是否成功解析了地址。此外,它使用out参数,以便您可以立即使用已解析的IP地址。

如果您只对IP地址是否有效感兴趣,可以使用dummy IP地址:

private bool ValidIP(string ipAddress) {
    IPAddress dummy;
    return IPAddress.TryParse(ipAddress,out dummy);
}

此外,请注意ParseTryParse方法的重要说明:

  

请注意TryParse如果成功解析输入,则会返回true ,   但这确实并不一定意味着产生的IP地址   是有效的。请勿使用此方法验证IP地址。

答案 1 :(得分:2)

语句return true无法抛出异常,因此两个代码段完全相同。如果你正在执行一些可能实际抛出异常的值的计算,并且你希望抛出异常导致该方法抛出该异常,而不是返回false,那么你需要使用后一种方法。 / p>