在 catch块中使用 return 语句是错误的吗? 还有别的选择吗? 即:
catch
public bool SomeFunction() { try { //somecode return true; } catch(Exception ex) { MessageBox.Show(ex.message); return false; } }
可以从 catch 块正常返回。 它通常是很好的函数代码。
对我来说,成功时返回真,失败时返回假的函数非常有意义。我希望它没有什么问题——我一直这样做:)
一种替代方法是将返回值存储在一个临时变量中:
public bool SomeFunction() { bool success = true; try { //somecode } catch(Exception ex) { MessageBox.Show(ex.message); success = false; } return success; }
但就我个人而言,我发现您编写它的方式(使用一个捕捉所有信息的语句)更具可读性。另一方面,如果您期待一个特定的异常,并且您可能有多条路径来返回成功与否..。
try { DoTheImportantThing(); DoTheOtherThingThatMightFailButWeDontCare(); } catch (DontCareAboutItException ex) { log.Info(ex); } catch (Exception ex) { log.Error(ex); return false; } return true;
那么在我看来,你最好把 return 语句推到尽可能接近结尾的地方。
需要注意的是,根据应用程序的不同,可以考虑记录捕获的异常,而不仅仅是将它们显示给用户。日志异常比用户对发生的事情的描述可靠得多。
public bool SomeFunction() { try { //somecode return true; } catch(Exception ex) { MessageBox.Show(ex.message); } return false; }
就个人而言,我将 return 语句放在方法的底部,而不是 catch-block 中。但两者都很好。这完全取决于组织中的可读性(主观的)和指导方针。
Catch 块的主要用途是提供一个可以处理 try 块中发生的异常情况的位置。所以您捕获了一个异常,继续执行它... 并从一个方法返回。如果调用方方法不关心异常,那么这是绝对正常的。
没关系,只要记住,有些代码可能在返回指令之后执行(返回值将被兑现)。
try { return; } catch(Exception ex) { return; } finally { //some code }
如果在 try 块中已经有一个 return 语句,我可能会把另一个 return 放在函数的末尾:
try { //somecode return true; } catch(Exception ex) { MessageBox.Show(ex.message); } return false;
这样做是为了在需要处理多个异常时避免多个返回。
这并没有错,但是如果您使用了资源,通常都会使用 finally 块来关闭它,而不是也调用 close 方法两次。在这种情况下,您可以选择在 finally 块之后使用 return 语句。
是的,这很正常。
不要忘记,还可以使用返回后执行的 终于块。
可以在 catch 块中添加 return。您显式地知道代码将返回并继续执行,而不是在 catch 块停止。
return
try{ //do something } catch{ //error handling return; }
代码中不要有太多的 try-catch 块,这样会让代码变得混乱并导致代码混乱,最好是处理 noe 中的所有 try catch 块并检查返回的错误是什么。
try{ //do something } catch (Exception as err){ if (err == "IOException"){ //handle exception else if (err.indexOf("TypeError"){ //handle exception } }
这是两种检查异常类型的方法,以便您可以相应地显示消息。你也可以只捕获特定的异常,如果你想这样做,而不是 Exception as err,你可以做 catch IOException, ...
Exception as err
catch IOException, ...