Rumah >pembangunan bahagian belakang >C++ >Mengapa C# Melemparkan Ralat Apabila Mengisytiharkan Pembolehubah dengan Nama Yang Sama dalam Skop Bersarang?

Mengapa C# Melemparkan Ralat Apabila Mengisytiharkan Pembolehubah dengan Nama Yang Sama dalam Skop Bersarang?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-16 17:05:11983semak imbas

Why Does C# Throw an Error When Declaring Variables with the Same Name in Nested Scopes?

Memahami Skop Pembolehubah C# dan Konflik Penamaan

Pembangun C# kadangkala menghadapi ralat yang membingungkan: pembolehubah tidak boleh diisytiharkan kerana ia bercanggah dengan pembolehubah dengan nama yang sama dalam skop bersarang. Ini berlaku apabila anda mengisytiharkan dua pembolehubah dengan pengecam yang sama dalam blok kod bersarang.

Isunya

Pertimbangkan contoh ini:

<code class="language-csharp">if (true)
{
    string myVar = "Inner Value";
}

string myVar = "Outer Value"; </code>

Ini akan mengakibatkan ralat pengkompil yang serupa dengan: "Pembolehubah tempatan bernama 'myVar' tidak boleh diisytiharkan dalam skop ini kerana ia akan memberi makna yang berbeza kepada 'myVar', yang sudah digunakan dalam skop 'kanak-kanak'. "

Penjelasan

Ralat ini berpunca daripada peraturan skop C#. Pengkompil tidak mengutamakan pengisytiharan pembolehubah berdasarkan susunan penampilannya. Sebaliknya, ia memberi tumpuan kepada hierarki skop. myVar dalam blok if dianggap sebagai skop kanak-kanak dan kewujudannya menghalang pengisytiharan satu lagi myVar dalam skop induk.

Amalan Terbaik

Walaupun kelihatan berlawanan dengan intuisi, tingkah laku ini membantu mengelakkan kekaburan dan ralat pengekodan. Amalan terbaik untuk mengelak daripada menggunakan nama pembolehubah yang sama dalam skop bersarang.

Penyelesaian adalah mudah: menamakan semula salah satu pembolehubah untuk menghapuskan konflik. Contohnya:

<code class="language-csharp">if (true)
{
    string innerVar = "Inner Value";
}

string outerVar = "Outer Value";</code>

Menggunakan skop adik-beradik (meletakkan kedua-dua pengisytiharan di luar blok if) secara teknikal mungkin tetapi selalunya membawa kepada kod yang kurang boleh dibaca dan boleh diselenggara.

Ringkasnya

Dalam C#, pembolehubah yang dinamakan sama dalam skop bersarang dianggap sebagai entiti tunggal, tanpa mengira susunan pengisytiharan. Untuk mengekalkan kod yang jelas dan bebas ralat, elakkan pendua nama pembolehubah dalam skop bersarang dengan menggunakan pengecam deskriptif dan unik.

Atas ialah kandungan terperinci Mengapa C# Melemparkan Ralat Apabila Mengisytiharkan Pembolehubah dengan Nama Yang Sama dalam Skop Bersarang?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
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