5

我见过一些开发人员在 catch 块中使用 return 语句。为什么/何时这是一种有用的技术?

编辑:我实际上刚刚看到使用了 return 关键字。

谢谢

4

6 回答 6

7

有时你并不关心抛出的异常,只关心 Try 操作失败。一个示例是 TryParse 函数,它在伪代码中如下所示:

try
{
   //attempt conversion
   return true;
}
catch
{
   return false;
}
于 2010-03-03T17:42:21.713 回答
1

如果您知道函数的返回值应该在 catch 块中,这将很有用。

例子:

public bool IsDatabaseAvailable() {
    try {
        // connect
        return true;
    }
    catch (Exception) {
        return false;
    }
    finally {
        // clean up
    }
}
于 2010-03-03T17:43:54.000 回答
1

您可能想要捕获错误,记录它并说返回一个 false 值,表示函数是否成功。在其他情况下,您可能希望返回一些在 try 块中计算的数据

于 2010-03-03T17:44:10.287 回答
1

.Net Framework 中的某些方法在格式不正确时会抛出异常。

一个很好的例子是int.TryParse(object value)

如果您的值为“10s”,它将引发异常。在这种情况下,我们知道这是因为无效转换。

所以

try 
{ 
    int.TryParse(value);
    return true; 
}
catch { return false; }

可能是一个函数,它告诉我们字符串是否是有效的整数。

如果您确实为此使用该表单,请不要执行 catch (Exception ex),因为这样做会强制 .Net 序列化对象内部的错误,这有点慢。

同样重要的是要记住,即使您在 try catch 块中使用 return,它仍然会执行 finally 块。

因此,如果您的清理代码在 finally 中,请不要担心框架会确保调用它。

我的 2 美分。N。

于 2010-03-03T17:47:52.687 回答
1

公共无效函数(){

try 
{ 
    //some code here
}
catch
{ 
    return;
}

}

返回时;命中,执行流程跳出函数。这只能在 void 方法上完成。

编辑:如果您不想执行其余功能,请执行此操作。例如,如果您正在执行文件 IO 并且发生读取错误,则您不想执行处理该文件中数据的代码,因为您没有它。

于 2010-03-03T17:54:29.083 回答
0

如果尝试失败,您有其他选择的任何情况。一个例子可能是检查是否file适用于某些人operation

    bool IsComplete = false;

    try
    {
      //  FileStream currentWriteableFile = 
                     File.OpenWrite(sFileLocation);          
    }
    catch(Exception)
    {
      return false;
    }
于 2010-03-03T17:52:12.757 回答