从 try/catch 到 return 值的正确方法
Correct way to return value from try/catch
我有一个名为 ValidIP()
的方法,如果字符串是有效的 IP 地址,它会接受 string
和 returns true
。示例 1 returns 在 try
/catch
语句之后为真,因为我不关心在返回值时捕获异常。示例 2 returns 测试字符串后直接在 try 指令中等待异常时的值。这是个人喜好问题还是一个例子更正确还是 safer/less 容易崩溃?
示例 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;
}
}
语句return true
无法抛出异常,因此这两个片段是相同的。如果您正在对您 return 的值执行一些实际上可能引发异常的计算,并且您希望在那里抛出异常以导致方法抛出该异常,而不是 returning false,那么您' d 需要使用后一种方法。
据我所知,这两种方法是等效的。然而,解决这个问题的更优雅的方法是使用 IPAddress.TryParse
方法:
public static bool TryParse(string ipString,out IPAddress address)
方法returnstrue
或false
取决于是否成功解析地址。此外,它还使用了一个 out
参数,以便您可以立即使用解析后的 IP 地址。
如果您只关心 IP 地址是否有效,您可以使用 dummy
IP 地址:
private bool ValidIP(string ipAddress) {
IPAddress dummy;
return IPAddress.TryParse(ipAddress,out dummy);
}
进一步注意 Parse
和 TryParse
方法的重要说明:
Note that TryParse
returns true
if it parsed the input successfully,
but that this does not necessarily mean that the resulting IP address
is a valid one. Do not use this method to validate IP addresses.
我有一个名为 ValidIP()
的方法,如果字符串是有效的 IP 地址,它会接受 string
和 returns true
。示例 1 returns 在 try
/catch
语句之后为真,因为我不关心在返回值时捕获异常。示例 2 returns 测试字符串后直接在 try 指令中等待异常时的值。这是个人喜好问题还是一个例子更正确还是 safer/less 容易崩溃?
示例 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;
}
}
语句return true
无法抛出异常,因此这两个片段是相同的。如果您正在对您 return 的值执行一些实际上可能引发异常的计算,并且您希望在那里抛出异常以导致方法抛出该异常,而不是 returning false,那么您' d 需要使用后一种方法。
据我所知,这两种方法是等效的。然而,解决这个问题的更优雅的方法是使用 IPAddress.TryParse
方法:
public static bool TryParse(string ipString,out IPAddress address)
方法returnstrue
或false
取决于是否成功解析地址。此外,它还使用了一个 out
参数,以便您可以立即使用解析后的 IP 地址。
如果您只关心 IP 地址是否有效,您可以使用 dummy
IP 地址:
private bool ValidIP(string ipAddress) {
IPAddress dummy;
return IPAddress.TryParse(ipAddress,out dummy);
}
进一步注意 Parse
和 TryParse
方法的重要说明:
Note that
TryParse
returnstrue
if it parsed the input successfully, but that this does not necessarily mean that the resulting IP address is a valid one. Do not use this method to validate IP addresses.