我有一个简单的测试代码在.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!");
}
}
Run Code Online (Sandbox Code Playgroud)
首先,奇怪的是,在运行编译的RELEASE exe文件时,.NET4.5.1中完全忽略了NullReferenceException类型异常.基本上,不会抛出任何错误,但在调试模式下会抛出异常.
第二个(也是最重要的),如果错误与NullReferenceException不同,例如"索引超出范围",则实际上会按预期抛出异常,但是"finally"块永远不会被命中,而不是我期望从try-catch-finally块中获得的行为.我试过不同的机器,我的另外两个同事也在尝试,我们都得到了相同的结果.
似乎我从未真正理解try-catch-finally块,或者.NET4.5.1以不同的方式处理异常,或者.NET4.5.1存在一些错误.我所知道的是上面的代码在.NET3.5中工作,正如我所期望的那样,但是在.NET4.5.1中运行它时似乎没有得到相同的结果.
有人可以对此有所了解吗?我现在完全失去了.
编辑 根据Eric J的回答,我能够解决NullReferenceException问题.自从我提出两个问题后,我将为第二个问题创建一个新线程. Try-Catch-Finally阻止了.NET4.5.1的问题
c# ×1