如何在抛出异常后恢复代码执行?
例如,拿下面的代码:
namespace ConsoleApplication1
{
public class Test
{
public void s()
{
throw new NotSupportedException();
string @class = "" ;
Console.WriteLine(@class);
Console.ReadLine();
}
}
public class Program
{
public static void Main(string[] args)
{
try
{
new Test().s();
}
catch (ArgumentException x)
{
}
catch (Exception ex)
{
}
}
}
}
单步执行时捕捉到异常后,程序将停止运行。我怎么还能继续执行呢?
编辑:我的具体意思是 Console.WriteLine(@class);似乎没有被击中,因为当我在 Debug模式下运行它时,程序退出 Debug模式。我想跑到这条线并停在那里。
谢谢
最佳答案
嗯,在 catch
block 之后没有任何代码,所以程序将停止运行。不确定您要做什么。
以下应该证明程序不会在 catch
block 之后简单地“停止”。如果有要执行的代码,它将在 catch
block 之后执行代码:
static void Main(string[] args)
{
try
{
new Test().s();
}
catch (ArgumentException x)
{
Console.WriteLine("ArgumentException caught!");
}
catch (Exception ex)
{
Console.WriteLine("Exception caught!");
}
Console.WriteLine("I am some code that's running after the exception!");
}
代码将根据捕获的异常打印适当的字符串。然后,它会在最后打印 I am some code that's running after the exception!
。
更新
在您的编辑中,您询问了为什么 Console.WriteLine(@class);
似乎没有被击中。原因是您明确在s()
方法的第一行中抛出异常;随后的任何内容都将被忽略。当遇到异常时,执行停止并且异常在调用堆栈中向上传播,直到适当的处理程序可以处理它(这可能是与 try
相对应的 catch
block 将有问题的语句包装在同一个方法中,或者它可能是调用堆栈更上层的 catch
block 。如果没有找到合适的处理程序,程序将以堆栈跟踪终止 [至少在Java - 不确定在 C# 中是否会发生同样的情况])。
如果你想点击 Console.WriteLine
行,那么你不应该在方法的开头明确抛出异常。
关于c# - 在抛出并捕获异常后恢复执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3007608/