使用子范围中使用的变量名称

Car*_*los 14 c#

我一直想知道为什么在C#中使用以前在子作用域中使用的变量名是不允许的.像这样:

if (true)
{
    int i = 1;
}

int i = 2;
Run Code Online (Sandbox Code Playgroud)

编译上面的代码会产生错误:

名为"i"的局部变量不能在此范围内声明,因为它会给"i"赋予不同的含义,"i"已在"子"范围内用于表示其他内容

然而,您也不能使用子范围中定义的变量.上面的代码在Java中运行得很好,我也看不出它在C#中也没有原因.我确信这是一个很好的理由,但它是什么?

Ada*_*and 14

这是C#设计师的设计选择.它减少了潜在的歧义.

你可以在if或outside之内的两个地方之一使用它,但你只能在一个地方定义它.否则,您会发现编译器错误.