我一直想知道为什么在C#中使用以前在子范围中使用的变量名称是不允许的。就像这样:使用在子范围中使用的变量名称
if (true)
{
int i = 1;
}
int i = 2;
编译上面的代码产生一个错误:
A local variable named 'i' cannot be declared in this scope because it would give a different meaning to 'i', which is already used in a 'child' scope to denote something else
可是你不能使用儿童范围内定义任何变量。上面的代码在Java中工作得很好,我也没有看到为什么它不在C#中。我确定有一个很好的理由,但它是什么?
我其实认为会有一个“真正”的原因,因为我真的不明白为什么会有人做出这样的选择。 :D但是我确实看到了这一点,很高兴知道原因。 – Carlos 2010-01-13 19:21:20
khilon:我真的认为真正的原因是我所建议的;^_^ – Toad 2010-01-13 19:22:46
@Carlos fyi,_real_的原因是所有变量声明都在某个时间点(编译或JIT)移动到其范围的顶部。因此,您的范围与您的声明有关的排序很少,在运行时,子/祖范围冲突永远是冲突。编译器提前拒绝它。 – Gusdor 2014-12-12 12:11:14