在方法中抛出异常会导致方法返回吗?

Jac*_*win 7 c# methods return exception

我有以下代码:

public static Point operator /(Point point, double value)
    {
        if (value == 0)
        {
            throw new DivideByZeroException("Cannot divide by zero");
            return Point.Origin;
        }
        return new Point(point.X / value, point.Y / value, point.Z / value);
    }
Run Code Online (Sandbox Code Playgroud)

并且第一个return语句(return Point.Origin;)在Visual Studio中以绿色下划线标出.当光标悬停在带下划线的文本上时,消息显示"检测到无法访问的代码".这引出了我在标题行中陈述的问题:

在方法中抛出异常会导致方法返回吗?

Jon*_*eet 9

好吧,它导致方法的执行退出,是的.异常被抛出堆栈,最接近捕获它的方法.如果它不影响执行流程,那将是毫无意义的.

这与返回"正常"的方法不同 - 即没有例外.所以假设调用方法有:

Point foo = bar / baz;
Console.WriteLine("Done");
Run Code Online (Sandbox Code Playgroud)

在这种情况下,如果除法运算符抛出异常,则不会执行Console.WriteLine()调用.相反,无论是异常将在此方法中捕获,异常将传播到方法的调用者,等等.

(finally块也将沿途执行.)

它可能值得阅读MSDN指南"处理和抛出异常".


Ily*_*nov 1

在方法中抛出异常是否会导致该方法返回?

是的。方法的执行被中断,因此方法返回其执行流程。但没有返回您用return语句定义的值。当前方法中之后的任何行都不会throw new被执行,除了相应的catchandfinally块之外。所以抛出异常后不必返回值。

Visual Studio 在检测到无法访问的代码块上加下划线。在您的特定情况下, return Point.Origin;语句永远不会被执行,因此您可以将其删除。