Bagikan melalui


CA1862: Gunakan metode 'Perbandingan String' kelebihan beban untuk melakukan perbandingan string yang tidak peka huruf besar/kecil

Properti Nilai
ID Aturan CA1862
Judul Gunakan metode 'Perbandingan String' kelebihan beban untuk melakukan perbandingan string yang tidak peka huruf besar/kecil
Golongan Performa
Perbaikan bersifat disruptif atau non-disruptif Non-disruptif
Diaktifkan secara default di .NET 8 Sebagai saran

Penyebab

Kode membandingkan dua string dengan cara yang tidak peka huruf besar/kecil dengan terlebih dahulu memanggil ToLower(), , ToLowerInvariant(), ToUpper()atau ToUpperInvariant() pada satu atau kedua string.

Deskripsi aturan

Ketika kode memanggil ToLower(), , ToLowerInvariant(), ToUpper()atau ToUpperInvariant(), alokasi dilakukan. Jika satu-satunya alasan untuk memanggil metode ini adalah untuk melakukan perbandingan atau pencarian string yang tidak peka huruf besar/kecil, alokasi tidak perlu. Sebagai gantinya, Anda dapat memanggil metode perbandingan string yang mengambil StringComparison dan menentukan salah *IgnoreCase satu nilai.

Cara memperbaiki pelanggaran

Hapus panggilan ke ToLower(), , ToLowerInvariant(), ToUpper()atau ToUpperInvariant(), dan panggil salah StringComparer satu metode, atau salah satu metode berikut yang mengambil StringComparison argumen:

Catatan

  • Jika Anda mengubah kode untuk menggunakan kelebihan beban yang mengambil StringComparison argumen, kode tersebut dapat menyebabkan perubahan perilaku yang halang. Penting untuk melakukan pengujian menyeluruh jika Anda membuat perubahan ini atau menerima saran bola lampu Visual Studio.
  • Jika string tidak perlu dibandingkan dengan cara yang sensitif secara budaya, pertimbangkan untuk melewati StringComparison.OrdinalIgnoreCase.

Contoh

Contoh berikut menunjukkan pelanggaran aturan:

string s1 = "aBc";
string s2 = "aBC";

int _ = s1.ToUpper().CompareTo(s2.ToUpper());
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = s1.ToUpper().CompareTo(s2.ToUpper())

Contoh berikut menunjukkan kode yang memperbaiki pelanggaran:

string s1 = "aBc";
string s2 = "aBC";

int _ = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2);
Dim s1 As String = "aBc"
Dim s2 As String = "aBC"

Dim i As Integer = StringComparer.CurrentCultureIgnoreCase.Compare(s1, s2)

Kapan harus menekan peringatan

Aman untuk menekan peringatan dari aturan ini jika performa tidak menjadi perhatian.

Jika Anda menggunakan Entity Framework Core (EF Core), Anda harus menekan aturan ini untuk skenario di mana Anda mengkueri database dengan membandingkan string. EF Core memberikan pengecualian jika Anda menggunakan metode seperti String.Equals(String, StringComparison) yang mengambil StringComparison argumen, karena tidak akan menerjemahkan kueri tersebut ke SQL. Untuk informasi selengkapnya, lihat Terjemahan operasi string .NET bawaan.

Menyembunyikan peringatan

Jika Anda hanya ingin menyembunyikan satu pelanggaran, tambahkan arahan praprosedur ke file sumber Anda untuk dinonaktifkan lalu aktifkan kembali aturannya.

#pragma warning disable CA1862
// The code that's violating the rule is on this line.
#pragma warning restore CA1862

Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none dalam file konfigurasi.

[*.{cs,vb}]
dotnet_diagnostic.CA1862.severity = none

Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.