【问题标题】:Correct way to return value from try/catch [closed]从 try/catch 返回值的正确方法 [关闭]
【发布时间】:2016-06-15 17:39:36
【问题描述】:

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

【问题讨论】:

  • 两个程序完全等价...
  • 除此之外,private bool ValidIP(string ipAddress) { IPAddress tmp; return IPAddress.TryParse(ipAddress, out tmp); 是最好的方法。这样您就不必处理抛出和捕获异常的开销了。

标签: c# ip-address


【解决方案1】:

据我所知,这两种方法是等效的。然而,解决这个问题的更优雅的方法是使用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 地址。

【讨论】:

  • 我认为这是最好的解决方案,你说得对,IPAddress 已经提供了 TryParse() 方法,这基本上是我试图创建的。感谢威廉帮助我保持头脑清醒。
【解决方案2】:

statementreturn true 无法抛出异常,所以两个sn-ps 是相同的。如果您正在对返回的值执行一些实际可能引发异常的计算,并且您希望在那里引发的异常导致方法引发该异常,而不是返回 false,那么您需要使用后一种方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-23
    • 2014-04-30
    • 1970-01-01
    • 2012-05-18
    • 2011-06-03
    • 1970-01-01
    相关资源
    最近更新 更多