Perbandingan Rujukan Null dalam C#: "x is null" vs. "x == null"
Dalam C# 7, pengenalan operator padanan corak telah menimbulkan persoalan tentang penggunaannya berbanding dengan ungkapan tradisional == null. Walaupun ungkapan ini mungkin kelihatan boleh ditukar ganti apabila berurusan dengan null, terdapat perbezaan utama yang perlu dipertimbangkan semasa membandingkan jenis rujukan.
Pertimbangan Jenis
Tidak seperti == null, yang membandingkan objek rujukan untuk kesamaan, x ialah semakan nol untuk jenis x. Jika x ialah jenis rujukan, x adalah null akan kembali benar hanya jika x adalah null. Sebaliknya, x == null mengembalikan benar untuk kedua-dua jenis null dan rujukan dengan nilai selain daripada null.
class Foo {} Foo foo = null; Console.WriteLine(foo is null); // True Console.WriteLine(foo == null); // True
Implikasi Prestasi
Secara dalaman, x ialah panggilan nol System.Object.Equals(objek, objek), manakala x == null memanggil ceq (kaedah perbandingan untuk jenis rujukan). Untuk rujukan nol, kedua-dua ungkapan mempunyai prestasi yang sama kerana kedua-duanya kembali benar. Walau bagaimanapun, untuk rujukan bukan nol, x adalah nol boleh menjadi lebih perlahan disebabkan oleh pemeriksaan jenis tambahannya.
Operator Kesaksamaan Terlebih Beban
Apabila pengendali kesaksamaan (seperti == atau Equals) terlebih beban untuk jenis tertentu, x adalah batal tidak lagi menyemak kesamaan jenis dan sebaliknya mewakilkan kepada lebihan beban pengendali. Sebaliknya, x == null sentiasa menyemak kesamarataan rujukan.
class Foo { public static bool operator ==(Foo left, Foo right) => ... public static bool operator !=(Foo left, Foo right) => ... } Foo foo1 = new Foo(); Foo foo2 = null; Console.WriteLine(foo1 is null); // False (checks type only) Console.WriteLine(foo1 == null); // False (delegates to overloaded operator) Console.WriteLine(foo2 is null); // True (checks type only) Console.WriteLine(foo2 == null); // True (reference comparison)
Bila Perlu Menggunakan Satu daripada Yang Lain
Secara umum:
Akhirnya, pilihan antara x adalah batal dan x = = null bergantung pada keperluan khusus kod anda.
Atas ialah kandungan terperinci C# Null Checks: Bila Menggunakan `x is null` vs. `x == null`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!