Rumah >pembangunan bahagian belakang >C++ >Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?

Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?

Barbara Streisand
Barbara Streisandasal
2025-01-22 11:31:12589semak imbas

String Comparison in C#: When Are `String.Equals()` and `==` Interchangeable?

Kekeliruan perbandingan rentetan C#: Adakah kaedah String.Equals() dan pengendali == boleh ditukar ganti?

Dalam C#, perbandingan rentetan kadangkala boleh menghasilkan hasil yang tidak dijangka. Soalan biasa ialah sama ada kaedah String.Equals() dan operator kesamaan == berkelakuan sama.

Pertimbangkan coretan kod berikut:

<code class="language-csharp">string s = "Category";
TreeViewItem tvi = new TreeViewItem();
tvi.Header = "Category";

Console.WriteLine(s == tvi.Header); // false
Console.WriteLine(s.Equals(tvi.Header)); // true
Console.WriteLine(s == tvi.Header.ToString()); // true</code>

Walaupun kedua-dua s dan tvi.Header mengandungi nilai "Kategori" yang sama, pengendali == mengembalikan false dan kaedah String.Equals() mengembalikan true. Ini menimbulkan persoalan: Mengapakah kedua-dua kaedah perbandingan ini menghasilkan keputusan yang berbeza?

Perbezaan Utama antara

String.Equals() dan ==

Terdapat dua perbezaan asas antara pengendali

String.Equals() dan ==:

  1. pelaksanaan jenis khusus: Pengendali == membandingkan berdasarkan jenis masa kompilasi objek, manakala String.Equals() adalah polimorfik, bermakna pelaksanaannya bergantung pada masa jalan jenis objek yang dibandingkan .
  2. Pengendalian nilai nol: Pengendali == tidak akan membuang pengecualian apabila membandingkan rujukan nol, manakala pengendali String.Equals() akan membuang pengecualian NullReferenceException jika mana-mana argumen adalah batal.

Contoh yang menunjukkan perbezaan

Untuk menggambarkan perbezaan ini, pertimbangkan kod berikut:

<code class="language-csharp">object x = new StringBuilder("hello").ToString();
object y = new StringBuilder("hello").ToString();

if (x.Equals(y)) // True

if (x == y) // False</code>

Walaupun x dan y mempunyai nilai yang sama, pengendali == mengembalikan false kerana ia membandingkan berdasarkan jenis masa kompilasi objek (object), yang berbeza. Untuk mendapatkan perbandingan yang betul, objek mesti dilemparkan secara eksplisit ke jenis yang sesuai (string dalam kes ini).

<code class="language-csharp">string xs = (string)x;
string ys = (string)y;

if (xs == ys) // True</code>

Kesimpulan

Walaupun pengendali String.Equals() dan == sering digunakan secara bergantian, adalah penting untuk memahami perbezaan halus dalam pelaksanaannya dan pengendalian nilai nol. Untuk memastikan perbandingan rentetan yang boleh dipercayai dan konsisten, biasanya disyorkan untuk menggunakan kaedah String.Equals(), terutamanya apabila membandingkan objek daripada jenis yang berbeza atau apabila berurusan dengan rujukan nol.

Atas ialah kandungan terperinci Perbandingan Rentetan dalam C#: Bilakah `String.Equals()` dan `==` Boleh Ditukar?. 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