Fenomena pelik dalam C#: perbandingan jenis nilai dan null
Dalam pengaturcaraan C#, jenis nilai biasanya dianggap tidak berubah, mempunyai nilai tetap. Walau bagaimanapun, fenomena yang membingungkan timbul mengenai perbandingan jenis nilai dengan nilai nol.
Kod berikut menunjukkan senario yang mengelirukan:
<code class="language-csharp">Int32 x = 1; if (x == null) { Console.WriteLine("What the?"); }</code>
Anehnya, kod ini disusun tanpa sebarang ralat. Menariknya, apabila cuba menetapkan null kepada pembolehubah jenis nilai, pengkompil akan membuang ralat seperti ini:
<code class="language-csharp">Int32 x = null;</code>
Tingkah laku ini mengelirukan pembangun dan menimbulkan persoalan tentang sama ada jenis nilai boleh menjadi batal.
Jawapan kepada dilema ini terletak pada beban operator yang berlebihan. C# menyediakan operator == terlebih beban yang menerima dua integer nullable sebagai argumen. Pembolehubah int boleh ditukar kepada int nullable, begitu juga literal null. Oleh itu, perbandingan adalah sah dan sentiasa menilai palsu.
Begitu juga, ungkapan "jika (x == 12.6)" juga sah, walaupun daripada jenis yang berbeza. pembolehubah int ditukar kepada dua kali ganda dan literal ditukar kepada dua kali ganda. Oleh kerana nilai ini tidak sama, hasilnya akan sentiasa palsu.
Ringkasnya, perbezaan ketara dalam cara C# mengendalikan jenis nilai dan nol berpunca daripada beban operator yang berlebihan. Pengkompil menggunakan set peraturan unik untuk menentukan pengendali yang paling sesuai untuk setiap perbandingan, membenarkan jenis nilai dibandingkan dengan nol tanpa mencetuskan ralat.
Atas ialah kandungan terperinci Mengapa Jenis Nilai C# Boleh Dibandingkan dengan Null Tanpa Ralat?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!