C# 変数のスコープと名前付けの競合について理解する
C# 開発者は、入れ子になったスコープ内の同じ名前の変数と競合するため、変数を宣言できないという、複雑なエラーに遭遇することがあります。これは、ネストされたコード ブロック内で同じ識別子を持つ 2 つの変数を宣言した場合に発生します。
問題
次の例を考えてみましょう:
<code class="language-csharp">if (true) { string myVar = "Inner Value"; } string myVar = "Outer Value"; </code>
これにより、次のようなコンパイラ エラーが発生します。「'myVar' という名前のローカル変数は、'child' スコープですでに使用されている 'myVar' に異なる意味を与えるため、このスコープでは宣言できません。 「
説明
このエラーは、C# のスコープ ルールに起因します。 コンパイラは、出現順序に基づいて変数宣言に優先順位を付けません。代わりに、スコープ階層に焦点を当てます。 myVar
ブロック内の if
は子スコープとみなされ、その存在により親スコープ内で別の myVar
を宣言できなくなります。
ベストプラクティス
一見直観に反しているように見えますが、この動作は曖昧さやコーディング エラーを防ぐのに役立ちます。 ネストされたスコープ内で同じ変数名を使用しないようにすることをお勧めします。
解決策は簡単です。変数の 1 つの名前を変更して競合を解消します。 例:
<code class="language-csharp">if (true) { string innerVar = "Inner Value"; } string outerVar = "Outer Value";</code>
兄弟スコープを使用する (両方の宣言を if
ブロックの外側に配置する) ことは技術的には可能ですが、多くの場合、コードが読みにくく保守しにくくなります。
要約
C# では、ネストされたスコープ内の同じ名前の変数は、宣言の順序に関係なく、単一のエンティティとして扱われます。 明確でエラーのないコードを維持するには、説明的で一意の識別子を使用して、ネストされたスコープ内で重複する変数名を避けます。
以上が入れ子になったスコープで同じ名前の変数を宣言すると C# がエラーをスローするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。