У меня есть простой тестовый код, который работает как ожидается в .NET3.5, но тот же код ведет себя совершенно по-другому в проекте, созданном с .NET4.5.1.
class Program
{
static void Main(string[] args)
{
try
{
string a = null;
var x = a.Length;
}
catch (Exception ex)
{
throw;
}
finally
{
Console.WriteLine("This is the finally block.");
}
Console.WriteLine("You should not be here if an exception occured!");
}
}
Прежде всего, странно, что исключение типа NullReferenceException полностью игнорируется в .NET4.5.1 при запуске скомпилированного EXE файла RELEASE. В принципе, ошибка не возникает, хотя в режиме отладки выбрано исключение.
Во-вторых (и самое главное), если ошибка отличается от исключения NullReferenceException, например, например, "индекс вне диапазона", тогда исключение фактически выбрано как ожидалось, но блок "finally" никогда не попадает это не поведение, которое я ожидал от блока try-catch-finally. Я пробовал на разных машинах, и у меня было еще 2 моих коллеги, и мы все получили тот же результат.
Кажется, что либо я никогда не понимал блок try-catch-finally, либо .NET4.5.1 обрабатывает исключение по-другому, или есть некоторая ошибка с .NET4.5.1. Все, что я знаю, это то, что приведенный выше код работает в .NET3.5, поскольку я ожидал, что он сработает, но я, похоже, не получаю тот же результат при его запуске в .NET4.5.1.
Может кто-то пролить свет на это? Прямо сейчас у меня полная потеря.
ИЗМЕНИТЬ На основании ответа Eric J я смог решить проблему NullReferenceException. Поскольку я задал два вопроса, я создам новый поток для второго вопроса. Try-Catch-finally блокировать проблемы с .NET4.5.1