Rumah >pembangunan bahagian belakang >C++ >Bolehkah Jenis Nilai dalam C# Dibandingkan dengan Null?

Bolehkah Jenis Nilai dalam C# Dibandingkan dengan Null?

Linda Hamilton
Linda Hamiltonasal
2025-01-16 18:24:14655semak imbas

Can Value Types in C# Be Compared to Null?

Penjelasan terperinci tentang perbandingan antara jenis nilai dan Null dalam C#

Dalam C#, walaupun secara amnya dipercayai bahawa jenis nilai (seperti integer) tidak boleh nol, mereka sebenarnya boleh dibandingkan dengan nilai nol. Tingkah laku ini boleh mengelirukan pembangun, seperti yang ditunjukkan dalam coretan kod berikut:

<code class="language-csharp">Int32 x = 1;
if (x == null)
{
    Console.WriteLine("What the?");
}</code>

Kod ini bercanggah dengan jangkaan kami bahawa x tidak boleh batal, kerana null mewakili objek nilai yang tidak ditetapkan. Walau bagaimanapun, pengkompil tidak membuang ralat, yang membuat kami mempersoalkan kesahihan perbandingan ini.

Penjelasan terletak pada cara unik pengendali diselesaikan dalam C#. Dalam kes ini, pengkompil mengenal pasti dua lebihan operator == yang mungkin digunakan:

  1. == operator untuk integer nullable (Nullable)
  2. Integer piawai == operator (Int32)

x dan null kedua-duanya boleh ditukar secara tersirat kepada integer nullable (Nullable). Memandangkan penghuraian operator memihak kepada pengendali yang lebih khusus, pengendali integer nullable (== untuk Nullable) dipilih dan perbandingan sentiasa dinilai palsu.

Tingkah laku ini konsisten dengan corak yang membolehkan jenis nilai dibandingkan dengan jenis primitif lain. Sebagai contoh, perbandingan x == 12.6 (di mana x ialah integer) juga sentiasa menghasilkan palsu kerana integer x boleh ditukar secara tersirat kepada nombor titik terapung berketepatan dua dan perbandingan adalah antara dua nombor titik terapung berketepatan dua. .

Atas ialah kandungan terperinci Bolehkah Jenis Nilai dalam C# Dibandingkan dengan Null?. 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