Rumah > pembangunan bahagian belakang > C++ > C# Null Checks: Bila Menggunakan `x is null` vs. `x == null`?

C# Null Checks: Bila Menggunakan `x is null` vs. `x == null`?

Barbara Streisand
Lepaskan: 2024-12-30 12:55:09
asal
843 orang telah melayarinya

C# Null Checks: When to Use `x is null` vs. `x == null`?

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

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

Bila Perlu Menggunakan Satu daripada Yang Lain

Secara umum:

  • Gunakan x == null jika anda bimbang tentang prestasi atau jika pengendali kesaksamaan terlebih beban.
  • Gunakan x adalah batal jika anda perlu menyemak kesamaan jenis (cth., dalam ungkapan padanan corak).

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!

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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan