C#-在catch子句中使用return

C#-在catch子句中使用return,c#,.net,try-catch,C#,.net,Try Catch,我在这里看到了一个类似的问题,但仍有一些事情我不明白。据我所知,当您使用try catch块时,如果抛出异常,catch块将立即执行,同一代码块中的catch子句之后不会执行任何代码。如果我做对了,如果我们有: try { // do something // throw an exception for some reason } catch (Exceptiox ex) { // do something when there is and exception thr

我在这里看到了一个类似的问题,但仍有一些事情我不明白。据我所知,当您使用
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;
    }
}
在这里,除了记录错误之外,不需要做任何事情。那么为什么要使用
返回
。这是个错误吗?如果不显式地
返回
,该方法不会完成吗?如果在
catch
子句之后有更多的代码,那么如果
return
不存在,并且
catch
仅用于记录错误,是否会执行该子句

我不能百分之百地确定捕获是否会在它的范围之外停止进一步执行 但这是我的问题之一,如果我错了,请纠正我

不,那是不对的。执行将在
捕获
块后正常继续,除非块内的某些代码更改流(例如
抛出
返回

因此,如果不希望继续执行,则必须返回
。即使当前在
catch
块之后没有代码,也可以更明确地说“处理这种类型的异常包括在此点之后不执行任何代码”

这就是说,您应该警惕捕获(Exception ex)
——捕获所有类型的异常都应该受到质疑,而且几乎总是不是正确的做法(尽管在本例中是针对日志记录的,这是“规则允许的异常”)

我不能百分之百地确定捕获是否会在它的范围之外停止进一步执行 但这是我的问题之一,如果我错了,请纠正我

不,那是不对的。执行将在
捕获
块后正常继续,除非块内的某些代码更改流(例如
抛出
返回

因此,如果不希望继续执行,则必须返回
。即使当前在
catch
块之后没有代码,也可以更明确地说“处理这种类型的异常包括在此点之后不执行任何代码”

这就是说,您应该警惕捕获(Exception ex)
——捕获所有类型的异常都应该受到质疑,而且几乎总是不是正确的做法(尽管在本例中是针对日志记录的,这是“规则允许的异常”)

我不能100%确定捕获是否会在其范围外停止进一步执行,但这是我的问题之一,如果我错了,请纠正我

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

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

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

(捕捉
异常
几乎总是一个坏主意,但那是另一回事。)

我不能100%确定捕获是否会在其范围外停止进一步执行,但这是我的问题之一,如果我错了,请纠正我

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

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

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


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

如果没有return语句,并且没有任何代码代替它,那么代码就会被执行。你们可以把任何东西从箱子里拿出来。它没有任何限制。

如果没有返回语句和其他代码,那么该代码就会被执行。你们可以把任何东西从箱子里拿出来。没有任何限制。

当然,
try/catch
之后的代码将执行,这是
catch
的主要目的之一。我相信这个问题没有必要。请先阅读一些文档,当然是在执行
try/catch
之后的代码,这是
catch
的主要目的之一。我相信这个问题没有必要。请先阅读一些文档