ホームページ > バックエンド開発 > C++ > C# が入れ子になったループで変数スコープのエラーを報告するのはなぜですか? また、「非表示の中括弧」はこれにどのような影響を与えますか?

C# が入れ子になったループで変数スコープのエラーを報告するのはなぜですか? また、「非表示の中括弧」はこれにどのような影響を与えますか?

DDD
リリース: 2025-01-12 14:02:43
オリジナル
794 人が閲覧しました

C# の入れ子になったループの変数スコープのエラーと解決策

この記事では、C# の変数スコープの複雑さを深く調査し、変数スコープの動作によって生じる疑問を説明するために 2 つのコード例を分析します。

コード例 1

<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 ループ内で宣言されているため、これは同じスコープ内での変数名の再利用を妨げるルールに違反します。

コード例 2

<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 ループの分離されたスコープ内でのみ使用されます。

Why Does C# Report Variable Scope Errors in Nested Loops, and How Do

以上がC# が入れ子になったループで変数スコープのエラーを報告するのはなぜですか? また、「非表示の中括弧」はこれにどのような影響を与えますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート