C# 変数スコープ: コンパイラが 'x' を混乱させるのはなぜですか?
次の C# コード スニペット:
<code class="language-csharp">if (true) { string var = "VAR"; } string var = "New VAR!";</code>
外部スコープで変数 'var' を 2 回目に宣言すると、次のエラーがスローされます:
エラー 1: 「var」という名前のローカル変数は、「子」スコープ内の他のものを表すためにすでに使用されている「var」とは異なる意味を持つため、このスコープでは宣言できません。
このエラーは、C# が重複するスコープで同じ名前の変数が再宣言されないように厳密なスコープ ルールを適用するために発生します。最初の 'var' 宣言は内部スコープに限定されており、外部スコープには影響を与えないように見えますが、コンパイラーは両方のインスタンスを同じスコープ内にあるものとして扱います。
この問題は、コンパイラー設計の制限に起因します。変数が宣言または使用される順序に関係なく、スコープのみに基づいて変数を分析します。したがって、次の理論的に有効なコード:
<code class="language-csharp">string var = "New VAR!"; if (true) { string var = "VAR"; }</code>
コンパイラもこれを無効とみなします。
この曖昧さを解決するには、別の変数名を使用するか、兄弟スコープを使用することをお勧めします。
<code class="language-csharp">string varOuter = "New VAR!"; if (true) { string varInner = "VAR"; }</code>
兄弟スコープは技術的には有効ですが、混乱を招く可能性があるため、通常は推奨されません。あるいは、変数の名前を変更することをお勧めします。これにより、異なるスコープの変数を区別しやすくなります。
以上がC# が異なるスコープでの変数の再宣言について苦情を言うのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。