Share via


CA1868: Nepotřebné volání "Contains" pro sady

Vlastnost Hodnota
ID pravidla CA1868
Název Nepotřebné volání "Contains" pro sady
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 Jako návrh

Příčina

Hovor ISet<T>.Add nebo ICollection<T>.Remove hovor je chráněn voláním Contains. IImmutableSet<T>.AddIImmutableSet<T>.Remove Nebo je hovor strážen voláním IImmutableSet<T>.Contains.

Popis pravidla

Obojí ISet<T>.Add(T) a ICollection<T>.Remove(T) proveďte vyhledávání, které předem zpřístupňuje volání ICollection<T>.Contains(T) . Volání nebo Remove(T) přímé volání Add(T) je efektivnější, což vrátí logickou hodnotu označující, jestli byla položka přidána nebo odebrána.

Tato logika platí také pro IImmutableSet<T>.Add(T) a IImmutableSet<T>.Remove(T)s tím rozdílem, že buď vrátí novou sadu, pokud je položka přidána nebo odebrána, nebo původní sada, pokud nebyla.

Jak opravit porušení

Nahraďte volání ICollection<T>.Contains(T) (nebo IImmutableSet<T>.Contains(T)) následované voláním ISet<T>.Add(T) nebo ICollection<T>.Remove(T) (nebo IImmutableSet<T>.Add(T)IImmutableSet<T>.Remove(T)) jedním voláním druhé metody.

Příklad

Následující fragment kódu ukazuje porušení 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

Následující fragment kódu opraví porušení zásad:

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

Kdy potlačit upozornění

Pokud výkon není problém, je bezpečné toto upozornění potlačit.

Potlačení upozornění

Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.

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

Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.

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

Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.