Bagikan melalui


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 8 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.