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仅用于记录错误,它会被执行吗?

c# -在catch子句中使用return

我不能100%确定catch会在它之外停止进一步的执行范围,但这是我的问题之一,所以如果我错了请纠正我。

不,那是不正确的。在catch块之后,执行将继续正常进行,除非块内的某些代码改变了流程(例如throwreturn)。

因此,如果您不想继续执行,则return 是必需的。即使当前catch块之后没有代码,恕我直言,可以更明确地说明"处理这种类型的异常涉及不执行此点之后的任何代码"。

也就是说,您应该警惕catch (Exception ex)——捕获所有类型的异常总是应该受到质疑,并且几乎总是不太正确的事情(尽管在这种情况下它是用于日志记录的,这是一个"规则允许的异常")。

我不能100%确定catch会在它的作用域之外停止进一步的执行,但这是我的问题之一,所以如果我错了请纠正我。

不,没有。如果catch块既没有重新抛出也没有返回,则从try/catch语句的末尾继续执行。

在您给出的示例中,return语句毫无意义。如果catch块后面有代码,那将是另一回事,因为return语句将使方法立即返回。

在这样的catch块中有return语句并不是一个错误,因为它是完全有效的代码,并且可能仍然会按预期执行-但这绝对是奇怪的。它很可能是从return语句重要的方法中剪切/粘贴的。

(捕获Exception几乎总是一个坏主意,但那是另一回事。)

如果没有return语句和其他任何代码,那么该代码将被执行。你可以从catch块返回任何东西。没有限制