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, která může být destruktivní nebo nedestruktivní Nezlomitelný
Povoleno ve výchozím nastavení v .NET 10 Jako návrh
Příslušné jazyky C# a Visual Basic

Příčina

Hovor typu ISet<T>.Add nebo ICollection<T>.Remove je chráněn voláním na Contains. IImmutableSet<T>.Add nebo IImmutableSet<T>.Remove volání je chráněno voláním IImmutableSet<T>.Contains.

Popis pravidla

Oba ISet<T>.Add(T) a ICollection<T>.Remove(T) provádějí vyhledávání, což činí volání ICollection<T>.Contains(T) předem zbytečným. Je efektivnější přímo volat Add(T) nebo Remove(T), 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.