为什么编译器会抱怨已定义的这个变量

时间:2012-11-03 15:49:27

标签: c#

  

可能重复:
  C# Variable Scoping

考虑以下代码:

void f()
{
  if (condition) 
  {
     B b = createB();
  }
  ...
  B b = getB();
}

我抱怨在子范围内已经定义的变量b。为什么是这样?第一个定义发生在嵌套范围内,外部范围不可见。我甚至无法访问外部作用域中先前声明的变量。那么编译器在这种情况下做了什么?

2 个答案:

答案 0 :(得分:0)

尝试使用这段代码,编译器不会抱怨:

void f()
{
  B b = null;
  if (condition) 
  {
     b = createB();
  }
  ...
  b = getB();
}

答案 1 :(得分:0)

它说明了它被创建两次的可能性。在第一行初始化变量,然后设置现在创建它的值。这意味着它只会被创建一次,但会带有与此相同的值。

编辑:请参阅FSX对代码的回答......这只是对其发生原因的解释。