Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
| 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.
- 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 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.