返回捕捉块?

catch块中使用 return 语句是错误的吗? 还有别的选择吗?
即:

public bool SomeFunction()
{
try
{
//somecode
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
return false;
}
    

}
69740 次浏览

可以从 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 块停止。

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, ...