この記事では、C# の変数スコープの複雑さを深く調査し、変数スコープの動作によって生じる疑問を説明するために 2 つのコード例を分析します。
<code class="language-c#">public void MyMethod() { int i = 10; for (int x = 10; x < 20; x++) { int i = x; // Point1: 变量i在此处重新声明 object objX = new object(); // Point2: 变量objX在此处重新声明 } object objX = new object(); }</code>
予想どおり、for ループ内の変数 i の再宣言により、Point1 でエラーが報告されます。このエラーは、同じローカル変数宣言スペースまたはネストされたローカル変数宣言スペース内で同じ名前の変数を使用することを許可しないという基本ルールに起因します。
ただし、Point2 のエラーは混乱を招く可能性があります。 objX 変数は for ループの外で宣言されていますが、コンパイラは引き続きエラーを報告します。ここで、「暗黙の中括弧」の概念が登場します。
C# では、すべての for ループは暗黙の中括弧で囲まれているとみなされます。したがって、for ループの外で宣言された objX 変数は、for ループ本体のスコープ内にあるとみなされます。別の objX 変数が for ループ内で宣言されているため、これは同じスコープ内での変数名の再利用を妨げるルールに違反します。
<code class="language-c#">public void MyMethod() { for (int i = 10; i < 20; i++) { // ... } for (int i = 10; i < 20; i++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } for (int objX = 10; objX < 20; objX++) { // ... } }</code>
コード例 2 では、コンパイラ エラーはなくなりました。これは、各 for ループに独自の暗黙の中括弧のセットがあり、各ループ内で i 変数と objX 変数に対して異なるスコープが作成されるためです。したがって、同じ名前の変数は、変数のスコープ規則に従って、それぞれの for ループの分離されたスコープ内でのみ使用されます。
以上がC# が入れ子になったループで変数スコープのエラーを報告するのはなぜですか? また、「非表示の中括弧」はこれにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。