为什么c#编译器会生成编译错误?

时间:2013-08-09 06:39:05

标签: c# .net compiler-construction clr

我有以下代码

using(some code)
{
var b = .... 
}
var b = ...

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

好的,编辑

using(some code)
{
var b = .... 
}
b = ...

Error:当前上下文中不存在名称“b”

3 个答案:

答案 0 :(得分:8)

“块的局部变量声明空间包括任何嵌套块。因此,在嵌套块中,不可能声明一个与封闭块中的局部变量同名的局部变量。” Variable Scopes, MSDN

答案 1 :(得分:1)

你可以这样做吗?

for (int i = 0; i < 10; i++)
{
    int j = 1;
}
 int j = 2;

答案是 NO ,这意味着它在各处都非常一致。现在它引出了一个问题。 对此问题的回答在同一局部变量声明空间或嵌套局部变量声明空间中有两个同名的局部变量是非法的。在上面的例子中,J的声明属于同一嵌套范围。

答案 2 :(得分:-2)

正确的代码应该是:

var b = something;
using(some code)
{
    b = smth;
}
b = smth;

您不能使用在该块之外的块({})内声明的变量。