2010-03-03 88 views
5

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

编辑:我其实只看到了正在使用的返回关键字。

感谢

回答

1

公共无效功能() {

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

}

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

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

7

有些时候,你不关心抛出的异常,只是在尝试操作失败。一个例子是在功能的TryParse这pseduo代码如下所示:

try 
{ 
    //attempt conversion 
    return true; 
} 
catch 
{ 
    return false; 
} 
1

这将是有用的,如果你知道函数的返回值应该在catch块的东西。

例子:

public bool IsDatabaseAvailable() { 
    try { 
     // connect 
     return true; 
    } 
    catch (Exception) { 
     return false; 
    } 
    finally { 
     // clean up 
    } 
} 
+0

我其实刚刚看到了正在使用的return关键字。 – dotnetdev 2010-03-03 17:45:36

+0

@dotnetdev:而不是什么?我正在使用return关键字。 – recursive 2010-03-03 17:48:36

+0

对不起,我的意思是“意思”(我其实只是意味着返回关键字...使用“)。 – dotnetdev 2010-03-03 17:53:19

1

你可能想捕获错误,记录它,并说返回值为false指示,如果函数成功。在其他情况下,您可能想要返回一些在try块中计算的数据。

1

.Net Framework中的某些方法在没有良好格式时会引发异常。

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

如果你的价值是“10秒”,它会特罗异常。在这种情况下,我们知道这是因为转换无效。

所以

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

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

如果你在这个问题上使用这种形式,请不要做catch(Exception ex),因为这样做会迫使.Net将对象内部的错误串行化,这很慢。

另外重要的是要记住,即使你使用try catch块内的返回值,它仍然会执行finally块。

所以,如果你的cleaup代码是在终于内部不要担心框架将确保调用它。

我的2美分。 N.

+0

我认为你的意思是'int.Parse',它引发无效格式;'int.TryParse'永远不会抛出,返回' bool'指示解析成功,并且接受'out int'的第二个参数。仅供参考。 – 2015-08-18 18:32:25

0

任何情况下,如果尝试失败,您有其他选择。 一个例子可以被检查,如果file可用于一些operation

bool IsComplete = false; 

    try 
    { 
     // FileStream currentWriteableFile = 
        File.OpenWrite(sFileLocation);   
    } 
    catch(Exception) 
    { 
     return false; 
    }