CA1870: Gunakan instans 'SearchValues' yang di-cache
Properti | Nilai |
---|---|
ID Aturan | CA1870 |
Judul | Menggunakan instans 'SearchValues' yang di-cache |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 8 | Sebagai saran |
Penyebab
Metode IndexOfAny
atau ContainsAny
dipanggil dengan banyak nilai konstanta dengan cara yang dapat memanfaatkan penggunaan SearchValues sebagai gantinya.
Aturan tidak menandai panggilan yang menggunakan hingga lima nilai, karena aturan tersebut sudah menggunakan implementasi yang optimal.
Deskripsi aturan
Menggunakan instans cache SearchValues<T> lebih efisien daripada meneruskan nilai ke IndexOfAny
atau ContainsAny
secara langsung.
Cara memperbaiki pelanggaran
Buat dan cache SearchValues<T> instans di static readonly
bidang, lalu teruskan instans tersebut ke IndexOfAny
atau ContainsAny
panggil sebagai gantinya.
Perbaikan kode yang melakukan transformasi ini tersedia.
Contoh
Cuplikan kode berikut menunjukkan dua pelanggaran CA1870:
static readonly char[] MyValues = new[] { 'a', 'b', 'c', 'x', 'y', 'z' };
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(MyValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept("abcxyz");
}
Cuplikan kode berikut memperbaiki pelanggaran:
private static readonly SearchValues<char> s_myValues = SearchValues.Create("abcxyz");
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(s_myValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept(s_myValues);
}
Jika ada beberapa panggilan ke IndexOfAny
dengan sekumpulan nilai yang sama, s_myValues
harus digunakan kembali.
Kapan harus menekan peringatan
Aman untuk menekan peringatan ini jika performa tidak menjadi perhatian.
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 CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1870.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.
Saran dan Komentar
https://aka.ms/ContentUserFeedback.
Segera hadir: Sepanjang tahun 2024 kami akan menghentikan penggunaan GitHub Issues sebagai mekanisme umpan balik untuk konten dan menggantinya dengan sistem umpan balik baru. Untuk mengetahui informasi selengkapnya, lihat:Kirim dan lihat umpan balik untuk