CA1868: Kümeler için gereksiz 'Contains' (İçerir) yöntemi çağrısı

Özellik Değer
Kural Kimliği CA1868
Başlık Kümeler için gereksiz Contains çağrısı
Kategori Performans
Düzeltme bozucu ya da bozmayan olabilir Kesintisiz
.NET 10'da varsayılan olarak etkin Öneri olarak
Geçerli diller C# ve Visual Basic

Neden

ISet<T>.Add veya ICollection<T>.Remove çağrısı, Contains tarafından yapılan bir çağrı ile korunur. Veya bir IImmutableSet<T>.Add veya IImmutableSet<T>.Remove çağrısı, IImmutableSet<T>.Contains tarafından korunur.

Kural açıklaması

ISet<T>.Add(T) de ICollection<T>.Remove(T) de bir arama gerçekleştirir, bu nedenle ICollection<T>.Contains(T) önceden çağrılmasına gerek yoktur. Doğrudan Add(T) veya Remove(T) çağırmak, öğenin eklenip kaldırılmadığını gösteren bir Boole değeri döndürdüğü için daha verimlidir.

Bu mantık IImmutableSet<T>.Add(T) ve IImmutableSet<T>.Remove(T) için de geçerlidir; öğe eklenmesi veya kaldırılması durumunda yeni bir küme döndürürler, ancak değişiklik yoksa özgün kümeyi döndürürler.

İhlalleri düzeltme

ICollection<T>.Contains(T) veya IImmutableSet<T>.Contains(T) çağrısının ardından gelen ISet<T>.Add(T), ICollection<T>.Remove(T), IImmutableSet<T>.Add(T) veya IImmutableSet<T>.Remove(T) çağrısını, yalnızca ikinci yönteme 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.