CA1868: Panggilan yang tidak perlu ke 'Berisi' untuk set
Properti | Nilai |
---|---|
ID Aturan | CA1868 |
Judul | Panggilan yang tidak perlu ke 'Contains' untuk set |
Golongan | Performa |
Perbaikan bersifat disruptif atau non-disruptif | Non-disruptif |
Diaktifkan secara default di .NET 9 | Sebagai saran |
Penyebab
Panggilan ISet<T>.Add atau ICollection<T>.Remove dijaga oleh panggilan ke Contains. Atau, IImmutableSet<T>.Add panggilan atau IImmutableSet<T>.Remove dijaga oleh panggilan ke IImmutableSet<T>.Contains.
Deskripsi aturan
Baik ISet<T>.Add(T) dan ICollection<T>.Remove(T) lakukan pencarian, yang membuatnya berlebihan untuk memanggil ICollection<T>.Contains(T) sebelumnya. Lebih efisien untuk memanggil Add(T) atau Remove(T) secara langsung, yang mengembalikan nilai Boolean yang menunjukkan apakah item ditambahkan atau dihapus.
Logika ini juga berlaku untuk IImmutableSet<T>.Add(T) dan IImmutableSet<T>.Remove(T), kecuali bahwa mereka mengembalikan set baru jika item ditambahkan atau dihapus, atau set asli jika tidak.
Cara memperbaiki pelanggaran
Ganti panggilan ke ICollection<T>.Contains(T) (atau IImmutableSet<T>.Contains(T)) yang diikuti oleh panggilan ke ISet<T>.Add(T) atau ICollection<T>.Remove(T) (atau IImmutableSet<T>.Add(T) atau IImmutableSet<T>.Remove(T)) dengan satu panggilan ke metode terakhir.
Contoh
Cuplikan kode berikut menunjukkan pelanggaran CA1868:
void Run(ISet<string> set)
{
if (!set.Contains("Hello World"))
{
set.Add("Hello World");
}
}
Sub Run(set As ISet(Of String))
If Not set.Contains("Hello World") Then
set.Add("Hello World")
End If
End Sub
Cuplikan kode berikut memperbaiki pelanggaran:
void Run(ISet<string> set)
{
set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
set.Add("Hello World")
End Sub
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 CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868
Untuk menonaktifkan aturan untuk file, folder, atau proyek, atur tingkat keparahannya ke none
dalam file konfigurasi.
[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none
Untuk informasi selengkapnya, lihat Cara menyembunyikan peringatan analisis kode.