【发布时间】:2011-01-04 04:39:51
【问题描述】:
if(true)
{
string var = "VAR";
}
string var = "New VAR!";
这将导致:
错误 1 名为 'var' 的局部变量 不能在此范围内声明 因为它会给你一个不同的 意思是'var',这已经是 在“子”范围内用于表示 别的东西。
真的没有什么惊天动地的事情,但这难道不是完全错误的吗?一位开发人员和我想知道第一个声明是否应该在不同的范围内,因此第二个声明不能干扰第一个声明。
为什么 C# 无法区分这两个作用域?第一个 IF 范围不应该与方法的其余部分完全分开吗?
我不能从 if 之外调用 var,所以报错信息是错误的,因为第一个 var 在第二个作用域中没有相关性。
【问题讨论】:
-
实际的编译器错误是 - 不能在此范围内声明名为“x”的局部变量,因为它会给“x”赋予不同的含义,它已在“父级或当前”中使用范围来表示其他东西。
-
我认为您使用的是 C# 2.0,因为
var是 C# 3.0 中的关键字。 -
@IceHeat - 看起来你陷入了假设 C# 比实际更像 C++ 的陷阱。尽量不要从 C++ 所做的事情与 C# 所做的事情进行推理——那是危险的领域!
-
var 不是 C# 3.0 的 reserved 关键字。 "var" 仅在 (1) 它作为局部变量声明的类型出现(或使用块 decl、或 foreach 或 for 等)和 (2) 当没有一个名为“var”的类型已经在范围内。自 C# 1 以来,C# 从未添加过保留关键字;所有的新关键字都是 contextual 关键字。它们仅在赋予它们含义的上下文中用作关键字时才具有含义;否则它们是合法的标识符。