c# -在catch子句中使用return
本文关键字:return 子句 catch | 更新日期: 2023-09-27 18:03:21
我在这里看到了一个类似的问题,但仍然有一些事情我不明白。据我所知,当您使用try-catch
块时,如果抛出异常,catch块将立即执行,并且在同一代码块中的catch
子句之后没有代码将被执行。如果我写对了如果我们有:
try
{
// do something
// throw an exception for some reason
}
catch (Exceptiox ex)
{
// do something when there is and exception thrown
}
// some code that will never be runned if and exception was thrown above
我不能100%确定catch
在其范围之外停止进一步执行,但这是我的问题之一,所以如果我错了请纠正我。
那么,如果您根本不需要返回任何值,那么在catch
块中使用return
有什么意义呢?我在我正在处理的继承代码中的一些方法中看到了这一点。例如:
public void DeleteImage(AppConfig imageInfo, string imageName)
{
string imgPath = imageInfo.ConfigValue.ToString();
try
{
File.Delete(imgPath + "''" + imageName);
}
catch (Exception ex)
{
logger.Error(ex.ToString());
return;
}
}
这里除了记录错误之外不需要做任何事情。为什么要用return
呢?这是个错误吗?如果不显式地设置return
,方法不会结束吗?如果在catch
子句之后有更多的代码,如果return
不存在并且catch
仅用于记录错误,它会被执行吗?
我不能100%确定catch会在它之外停止进一步的执行范围,但这是我的问题之一,所以如果我错了请纠正我。
不,那是不正确的。在catch
块之后,执行将继续正常进行,除非块内的某些代码改变了流程(例如throw
或return
)。
return
是必需的。即使当前在catch
块之后没有代码,恕我直言,可以更明确地说明"处理这种类型的异常涉及不执行此点之后的任何代码"。
也就是说,您应该警惕catch (Exception ex)
——捕获所有类型的异常总是应该受到质疑,并且几乎总是不太正确的事情(尽管在这种情况下它是用于日志记录的,这是一个"规则允许的异常")。
我不能100%确定catch会在它的作用域之外停止进一步的执行,但这是我的问题之一,所以如果我错了请纠正我。
不,没有。如果catch块既没有重新抛出也没有返回,则从try/catch语句的末尾继续执行。
在您给出的示例中,return
语句毫无意义。如果catch块后面有代码,那将是另一回事,因为return
语句将使方法立即返回。
在这样的catch
块中有return
语句并不是一个错误,因为它是完全有效的代码,并且可能仍然会按预期执行-但这绝对是奇怪的。它很可能是从return
语句重要的方法中剪切/粘贴的。
(捕获Exception
几乎总是一个坏主意,但那是另一回事。)
如果没有return语句和其他任何代码,那么该代码将被执行。你可以从catch块返回任何东西。没有限制