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



>我有一个名为ValidIP()的方法,它接受一个string并返回true如果字符串是有效的 IP 地址。示例 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;
}
}

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

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

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

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

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

此外,请注意ParseTryParse方法的重要评论:

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

语句return true无法引发异常,因此两个代码段是相同的。 如果您正在对返回的值执行一些计算,该值实际上可能会引发异常,并且您希望在那里引发异常导致方法引发该异常,而不是返回 false,则需要使用后一种方法。

最新更新