CA1862: Gunakan kelebihan beban metode 'StringComparison' 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
Kategori Performa
Perbaikan bersifat merusak atau tidak merusak Tidak terputus
Diaktifkan secara default di .NET 10 Sebagai saran
Bahasa yang berlaku C# dan Visual Basic

Penyebab

Kode membandingkan dua string dengan tidak peka huruf besar/kecil dengan memanggil terlebih dahulu 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 membedakan huruf besar/kecil, alokasi tidak perlu. Sebagai gantinya, Anda dapat memanggil metode perbandingan string yang mengambil StringComparison dan menentukan salah satu nilai *IgnoreCase.

Cara memperbaiki pelanggaran

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

Catatan

  • Jika Anda mengubah kode Anda untuk menggunakan overload yang mengambil argumen StringComparison, hal ini dapat menyebabkan perubahan perilaku yang halus. 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 menggunakan 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 mengabaikan peringatan dari aturan ini jika performa bukan masalah.

Jika Anda menggunakan Entity Framework Core (EF Core), Anda harus menonaktifkan aturan ini untuk skenario di mana Anda mengkueri database dengan membandingkan teks. 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.