1

重複の可能性:
C# 変数のスコープ

次のコードを検討してください。

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

変数 b が子スコープで既に定義されているというエラーが表示されます。どうしてこれなの?最初の定義は、外側のスコープからは見えないネストされたスコープで発生します。外側のスコープで以前に宣言された変数にアクセスすることさえできません。では、この場合、コンパイラは何をしているのでしょうか?

4

2 に答える 2

0

これは、2 回作成される可能性を考慮したものです。最初の行で変数を初期化し、現在作成している場所に値を設定します。これは、一度だけ作成されることを意味しますが、これが機能した場合と同じ値を持ちます。

編集:コードについては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 に答える