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