1

可能重复:
C# 变量范围

考虑这段代码:

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

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

4

2 回答 2

0

它解释了它被创建两次的可能性。在第一行初始化变量,然后在您现在创建它的位置设置值。这意味着它只会被创建一次,但如果它有效,它将携带相同的值。

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

于 2012-11-03T15:55:38.013 回答
0

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

void f()
{
  B b = null;
  if (condition) 
  {
     b = createB();
  }
  ...
  b = getB();
}
于 2012-11-03T15:53:54.357 回答