ホームページ > バックエンド開発 > C++ > C# が入れ子ループ内の変数スコープ エラーを報告するのはなぜですか?また、それらはどのように解決できますか?

C# が入れ子ループ内の変数スコープ エラーを報告するのはなぜですか?また、それらはどのように解決できますか?

Linda Hamilton
リリース: 2025-01-12 14:37:43
オリジナル
698 人が閲覧しました

Why Does C# Report Variable Scope Errors in Nested Loops and How Can They Be Resolved?

入れ子になったループにおける C# 変数のスコープの問題

C# の変数スコープを理解することは、一般的なエラーを回避するために重要です。 変数のスコープは、コード内のどこで変数にアクセスできるかを決定します。潜在的なスコープの問題を強調する 2 つのコード例を調べてみましょう:

例 1:

<code class="language-csharp">public void MyMethod(){
    int i=10;

    for(int x=10; x<20; x++){
        int i = x; // Point 1: Error
        Console.WriteLine(i);
    }
    Console.WriteLine(i); // Point 2: Error
}</code>
ログイン後にコピー

例 2:

<code class="language-csharp">public void MyMethod(){
    for(int x=10; x<20; x++){
        int i = x;
        object objX = new object();
        Console.WriteLine(i);
    }
    for(int y=20; y<30; y++){
        int i = y;
        object objX = new object();
        Console.WriteLine(i);
    }
}</code>
ログイン後にコピー

エラー分析

例 1 では、内部ループが i を再宣言し、同じスコープ内に同じ名前の新しい変数を作成するため、コンパイラはポイント 1 にフラグを立てます。これは、指定されたスコープ内で一意の変数名のルールに違反します。 ポイント 2 のエラーは、ループのスコープ内で別の i が宣言されているループの外側で i にアクセスしようとしたことが原因で発生します。

解決策

例 2 は正常にコンパイルされます。 2 つのループは個別のスコープを確立します。 各ループの i 変数と objX 変数は別個のエンティティとして扱われ、名前の競合を回避します。各ループは、非表示の中括弧で囲まれているかのように動作し、独自のローカル スコープを作成します。

重要なポイント

C# の変数スコープ ルールでは、指定されたスコープ内で一意の名前を指定し、そのスコープ全体で同じエンティティを一貫して参照することが義務付けられています。 これを理解すると、特に入れ子になったループ内で、例 1 に示したスコープ エラーを防ぐことができます。変数の宣言とスコープを注意深く管理することで、開発者はよりクリーンでエラーのない C# コードを作成できます。

以上がC# が入れ子ループ内の変数スコープ エラーを報告するのはなぜですか?また、それらはどのように解決できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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