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 9 | 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:
- String.Compare(String, String, StringComparison)
- String.Contains(String, StringComparison)
- String.EndsWith(String, StringComparison)
- String.Equals(String, StringComparison)
- String.IndexOf
- String.LastIndexOf
- String.Replace(String, String, StringComparison)
- String.StartsWith(String, StringComparison)
- Compare(Uri, Uri, UriComponents, UriFormat, StringComparison)
- StringSegment.Compare(StringSegment, StringSegment, StringComparison)
- StringSegment.EndsWith(String, StringComparison)
- StringSegment.Equals
- StringSegment.StartsWith(String, StringComparison)
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.