CA1868: Kümeler için gereksiz 'İçerir' çağrısı

Özellik Değer
Kural Kimliği CA1868
Başlık Kümeler için gereksiz 'contains' çağrısı
Kategori Performans
Hataya neden olan veya bozulmayan düzeltme Hataya neden olmayan
.NET 8'de varsayılan olarak etkin Öneri olarak

Neden

ISet<T>.Add Veya ICollection<T>.Remove çağrısı, çağrısı Containstarafından korunur. Veya bir IImmutableSet<T>.Add veya IImmutableSet<T>.Remove çağrısı, çağrısı IImmutableSet<T>.Containstarafından korunur.

Kural açıklaması

ICollection<T>.Remove(T) Hem hem de ISet<T>.Add(T) önceden çağrılmaya ICollection<T>.Contains(T) yedekli hale getiren bir arama gerçekleştirin. Öğenin eklenip eklenmediğini veya kaldırıldığını belirten bir Boole değeri döndüren veya Remove(T) doğrudan çağırmak Add(T) daha verimlidir.

Bu mantık ve için IImmutableSet<T>.Add(T)IImmutableSet<T>.Remove(T)de geçerlidir; öğe eklendiğinde veya kaldırıldığında yeni bir küme döndürmeleri ya da eklenmediyse özgün kümenin döndürülmesi dışında.

İhlalleri düzeltme

veya (veya veya ) çağrısının ICollection<T>.Contains(T) ardından gelen (veya IImmutableSet<T>.Remove(T)IImmutableSet<T>.Contains(T)IImmutableSet<T>.Add(T) ) çağrısını, ikinci yönteme ISet<T>.Add(T)ICollection<T>.Remove(T) yapılan tek bir çağrıyla değiştirin.

Örnek

Aşağıdaki kod parçacığı CA1868 ihlalini gösterir:

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

Aşağıdaki kod parçacığı ihlali düzeltir:

void Run(ISet<string> set)
{
    set.Add("Hello World");
}
Sub Run(set As ISet(Of String))
    set.Add("Hello World")
End Sub

Uyarıların ne zaman bastırılması gerekiyor?

Performansla ilgili bir sorun yoksa bu uyarıyı bastırmak güvenlidir.

Uyarıyı gizleme

Yalnızca tek bir ihlali engellemek istiyorsanız, kuralı devre dışı bırakmak ve sonra yeniden etkinleştirmek için kaynak dosyanıza ön işlemci yönergeleri ekleyin.

#pragma warning disable CA1868
// The code that's violating the rule is on this line.
#pragma warning restore CA1868

Bir dosya, klasör veya projenin kuralını devre dışı bırakmak için, yapılandırma dosyasındaki önem derecesini noneolarak ayarlayın.

[*.{cs,vb}]
dotnet_diagnostic.CA1868.severity = none

Daha fazla bilgi için bkz . Kod analizi uyarılarını gizleme.