Bagikan melalui


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.