Rumah > pembangunan bahagian belakang > C++ > Mengapa C# Melaporkan Ralat Skop Pembolehubah dalam Gelung Bersarang, dan Bagaimanakah 'Pendakap Halimunan' Mempengaruhi Perkara Ini?

Mengapa C# Melaporkan Ralat Skop Pembolehubah dalam Gelung Bersarang, dan Bagaimanakah 'Pendakap Halimunan' Mempengaruhi Perkara Ini?

DDD
Lepaskan: 2025-01-12 14:02:43
asal
797 orang telah melayarinya

Ralat dan penyelesaian skop pembolehubah dalam gelung bersarang C#

Artikel ini meneroka dengan mendalam kerumitan skop pembolehubah dalam C# dan menganalisis dua contoh kod untuk menerangkan soalan yang dibangkitkan oleh tingkah laku skop pembolehubah.

Contoh Kod 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>
Salin selepas log masuk

Seperti yang dijangkakan, ralat dilaporkan di Point1 disebabkan pengisytiharan semula pembolehubah i di dalam gelung for. Ralat ini berpunca daripada peraturan asas yang tidak membenarkan pembolehubah dengan nama yang sama digunakan dalam ruang perisytiharan pembolehubah tempatan yang sama atau ruang perisytiharan pembolehubah tempatan bersarang.

Walau bagaimanapun, ralat pada Point2 boleh mengelirukan. Pembolehubah objX diisytiharkan di luar gelung for, tetapi pengkompil masih melaporkan ralat. Di sinilah konsep "pendakap tersirat" dimainkan.

Dalam C#, setiap gelung for dianggap disertakan dalam pendakap tersirat. Oleh itu, pembolehubah objX yang diisytiharkan di luar gelung for dianggap berada dalam skop badan gelung for. Memandangkan pembolehubah objX lain diisytiharkan dalam gelung for, ini melanggar peraturan yang menghalang penggunaan semula nama pembolehubah dalam skop yang sama.

Contoh Kod 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>
Salin selepas log masuk

Dalam contoh kod 2, tiada lagi ralat pengkompil. Ini kerana setiap gelung for mempunyai set pendakap tersiratnya sendiri, mewujudkan skop berbeza untuk pembolehubah i dan objX dalam setiap gelung. Oleh itu, pembolehubah dengan nama yang sama hanya digunakan dalam skop terpencil bagi gelung masing-masing, tertakluk kepada peraturan skop pembolehubah.

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

Atas ialah kandungan terperinci Mengapa C# Melaporkan Ralat Skop Pembolehubah dalam Gelung Bersarang, dan Bagaimanakah 'Pendakap Halimunan' Mempengaruhi Perkara Ini?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan