she*_*bin 2 c# finally unhandled-exception
我有以下代码:
class SampleClass : IDisposable
{
public void Dispose()
{
Console.WriteLine("Execute Dispose!");
}
}
static void Main(string[] args)
{
SampleClass sc = new SampleClass();
try
{
throw new Exception();
}
finally
{
sc.Dispose();
}
}
Run Code Online (Sandbox Code Playgroud)
但是,当我运行它时,它不会打印Execute Dispose!消息,为什么会这样?
更新:
如果我像这样更改了代码:
static void Main(string[] args)
{
SampleClass sc = new SampleClass();
try
{
try
{
throw new Exception();
}
finally
{
sc.Dispose();
}
}
catch
{
throw;
}
}
Run Code Online (Sandbox Code Playgroud)
它首先打印消息然后崩溃.
我的想法是,如果应用程序崩溃,它可以随意处理吗?
我知道这很简单,但我真的要学到更多东西.
Eri*_*ert 11
你有一个未处理的例外.当您有未处理的异常时,程序行为依赖于实现.
正如您所发现的,在您的特定实现中,未处理的异常首先会询问您是否要调试未处理的异常(或在控制台上输出异常),然后运行finally块.
请注意,当存在未处理的异常时,无法保证finally块运行.如果认为合适,则允许实现在未处理的异常时立即终止该过程.
如果您不喜欢这种行为,那么您的选择是阻止或处理异常,或者获得运行时的不同实现,以便更好地执行您喜欢的操作.
它在我的测试中执行(LinqPad).
作为普通的控制台应用程序,消息出现在异常消息之后.
未处理的异常:System.Exception:抛出了类型'System.Exception'的异常.
在D中的OutputTest.Program.Main(String [] args)中:...\Program .cs:第27行
执行Dispose!
按任意键继续 ...
但它只显示一旦你关闭"应用程序已停止工作窗口"