如果字符串是有效的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;
}
}
答案 0 :(得分:4)
据我所知,两种方法都是等价的。然而,解决此问题的更优雅的方法是使用IPAddress.TryParse
方法:
public static bool TryParse(string ipString,out IPAddress address)
该方法返回true
或false
,具体取决于它是否成功解析了地址。此外,它使用out
参数,以便您可以立即使用已解析的IP地址。
如果您只对IP地址是否有效感兴趣,可以使用dummy
IP地址:
private bool ValidIP(string ipAddress) {
IPAddress dummy;
return IPAddress.TryParse(ipAddress,out dummy);
}
此外,请注意Parse
和TryParse
方法的重要说明:
请注意
TryParse
如果成功解析输入,则会返回true
, 但这确实并不一定意味着产生的IP地址 是有效的。请勿使用此方法验证IP地址。
答案 1 :(得分:2)
语句return true
无法抛出异常,因此两个代码段完全相同。如果你正在执行一些可能实际抛出异常的值的计算,并且你希望抛出异常导致该方法抛出该异常,而不是返回false,那么你需要使用后一种方法。 / p>