3

重複の可能性:
ネストされたローカル スコープで重複した変数名を宣言できないのはなぜですか?

皆さん、今日、よくわからない問題を見つけました。

中括弧が新しいローカル領域を作成するため、次の例は正しいはずだと思いました。そのため、中括弧の後の最初の x にアクセスできず、右中括弧の後に同じ名前の新しい変数を作成できるはずです。

 {
     int x = 0;
 }
 int x;

しかし、この例を試してみると、次のエラーが表示されます。他の何か。」

これは本当にC#では許可されていませんか? ReSharper 7.0 または Visual Studio 2012 の障害である可能性もあります。

悪いコーディング スタイルを考え出さないでください。これは、C# に関する私の基本的な理解にすぎません。

ありがとう、そして良い一日 ;)

4

1 に答える 1

4

問題は、優位性が問題にならないことです。あなたはこれがうまくいくとは思わなかったでしょう:

int x;
{
  int x = 0;
}

なぜだめですか?最初の変数のスコープが中括弧にまで及ぶためです。2 番目の変数のスコープがこれらのブラケットの外に拡張されていなくても、2 番目の変数を宣言すると問題が発生します。

順序を逆にしても同じ原則が適用されます。最初の変数は 2 番目の変数の宣言を妨げませんが、2 番目の変数は最初の変数の宣言を妨げます。

独自のスコープで 2 番目の変数を作成すると、期待どおりに動作します。

{
  int x = 0;
}
{
  int x;
}
于 2012-09-18T22:35:41.013 に答える