在catch块中有一个return语句是错误的吗?
有哪些替代方案?
即:
public bool SomeFunction()
{
try
{
//somecode
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
return false;
}
}
答案 0 :(得分:36)
您可以从catch块正常返回。 这通常是很好的功能代码。
答案 1 :(得分:19)
一种替代方法是将返回值存储在临时变量中:
public bool SomeFunction()
{
bool success = true;
try
{
//somecode
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
success = false;
}
return success;
}
但就个人而言,我发现你编写它的方式(带有一个catch-all catch语句)更具可读性。另一方面,如果您期望一个特定的异常,并且您可能有多个路径可以返回成功...
try
{
DoTheImportantThing();
DoTheOtherThingThatMightFailButWeDontCare();
}
catch (DontCareAboutItException ex)
{
log.Info(ex);
}
catch (Exception ex)
{
log.Error(ex);
return false;
}
return true;
然后在我看来,你最好尽可能地将回复陈述推到尽头。
作为旁注,根据应用程序的不同,请考虑记录您捕获的异常,而不是仅仅向用户显示它们。记录的异常比用户重述发生的事情要可靠得多。
答案 2 :(得分:11)
如果在try块中已经有一个return语句,我可能会把另一个返回放在函数的末尾:
try
{
//somecode
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
}
return false;
这是为了避免多次返回,如果需要处理多个异常。
答案 3 :(得分:8)
没关系,请记住,一些代码可能在返回指令后执行(返回值ll被兑现)。
try
{
return;
}
catch(Exception ex)
{
return;
}
finally
{
//some code
}
答案 4 :(得分:7)
public bool SomeFunction()
{
try
{
//somecode
return true;
}
catch(Exception ex)
{
MessageBox.Show(ex.message);
}
return false;
}
我个人将return语句放在方法的底部而不是catch块中。但两者都很好。这完全取决于组织中的可读性(主观)和指导原则。
答案 5 :(得分:2)
没错,但是如果你使用了资源,通常最后使用block来关闭它,而不是两次调用close方法。在这种情况下,您可以选择在finally块之后使用return语句。
答案 6 :(得分:2)
是的,这是完全正常的。
不要忘记,您还可以在返回后使用 finally 块执行。
答案 7 :(得分:0)
对于一个在成功时返回true而在失败时返回false的函数对我来说是完全合理的。我希望它没有任何问题 - 我一直这样做:)
答案 8 :(得分:0)
catch块的主要目的是提供一个可以在try块中发生异常情况的地方。所以你抓住了一个异常,继续它......并从一个方法返回。如果调用者方法不关心异常,这是绝对正常的。
答案 9 :(得分:0)
您可以在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, ...