if(true)
{
string var = "VAR";
}
string var = "New VAR!";
Run Code Online (Sandbox Code Playgroud)
这将导致:
错误1在此范围内无法声明名为"var"的局部变量,因为它会为"var"赋予不同的含义,"var"已在"子"范围中用于表示其他内容.
什么都没有惊天动地,但这不是一般的错误吗?一位开发人员和我想知道第一个声明是否应该在不同的范围内,因此第二个声明不能干扰第一个声明.
为什么C#无法区分这两个范围?第一个IF范围是否应该与方法的其余部分完全分开?
我无法从if外部调用var,因此错误消息是错误的,因为第一个var在第二个范围内没有相关性.
我一直想知道为什么在C#中使用以前在子作用域中使用的变量名是不允许的.像这样:
if (true)
{
int i = 1;
}
int i = 2;
Run Code Online (Sandbox Code Playgroud)
编译上面的代码会产生错误:
名为"i"的局部变量不能在此范围内声明,因为它会给"i"赋予不同的含义,"i"已在"子"范围内用于表示其他内容
然而,您也不能使用子范围中定义的变量.上面的代码在Java中运行得很好,我也看不出它在C#中也没有原因.我确信这是一个很好的理由,但它是什么?