Долгое время я думал, что это позволяет мне высвободить все ресурсы в блоке finally
, и я думал, что если исключение произойдет в блоке 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
}
}
}
Я никогда не достигаю строки, которая выводит на консоль. Это означает, что я не смогу освободить ресурс в блоке finally
в этом случае, за исключением того, что оно было сгенерировано внутри блока try
.
Итак, я считаю, что есть две вещи: либо я что-то пропущено или комбинация 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, и все еще не вижу вывода.