【发布时间】:2022-01-08 12:50:29
【问题描述】:
很长一段时间我都认为它可以让我释放finally块中的所有资源,我认为如果try块中发生异常,那么资源仍然会在try块中被释放finally 块。但似乎并非如此。
我有以下代码:
using System;
public sealed class Program
{
public static void Main()
{
try {
int zero = 0;
int i = 1/zero;
} finally {
Console.WriteLine("divide by zero"); //the line is never called
}
}
}
我从来没有到达打印到控制台的行。这意味着在这种情况下,在try 块内引发异常时,我将无法释放finally 块中的资源。
所以,我相信有两件事:要么我遗漏了一些东西,要么try + finally 组合在 C# 中没有用例。第二个语句是有道理的,因为我将获得与上面代码相同的功能,下面的代码:
using System;
public sealed class Program
{
public static void Main()
{
int zero = 0;
int i = 1/zero;
Console.WriteLine("divide by zero"); //the line is never called
}
}
但我担心我可能会在这里遗漏一些东西。那么,有人可以确认该组合是无用的还是证明它没有用?
更新
在能够在其小提琴中调用finally 块的注释之后,我再次检查了VS Code,但仍然没有看到任何输出。
【问题讨论】:
-
@MichaelRandall 尝试使用 .NET Core 编译器:dotnetfiddle.net/8hLq8h
-
@JohnathanBarclay,哦。你是我的救命恩人。这是由于 .NET Core 的转换,而我习惯了 .NET Framework。非常感谢。
-
@JohnathanBarclay,我相信您的评论就是我一直在寻找的答案。能否请您将其添加为答案?
-
这能回答你的问题吗? C# try catch confusion
-
@qqqqqqq Michael Randall 的回答解释了实际原因。我的小提琴只是一个观察。
标签: c# exception try-catch finally try-finally