在你的情况下,生命周期x是在{...}块内try; 但是,由于.Net中的局部变量没有零初始化,下一个包含前值的垃圾xx
try
{
int x = 5;
}
finally
{
// x is re-declared; since x is local it contains trash;
// former x was aquired at the stack, so .Net just moves stack pointer
// and doesn't remove former x value
int x;
...
}
Run Code Online (Sandbox Code Playgroud)
http://msdn.microsoft.com/en-us/library/aa691170(v=vs.71).aspx
...局部变量不会自动初始化,因此没有默认值 ...
http://msdn.microsoft.com/en-us/library/aa664742(v=vs.71).aspx
...在local-variable-declaration中声明的局部变量的范围是声明发生的块 ...
我猜你已经设置了一个断点,finally然后看了一下x.x没有根据C#语言规范的值,但调试器可能会查看第一个存储位置x并向您显示其值.
在真正的代码,你将无法读取x的finally.
调试器不遵守语言规则.