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 9 | Jako návrh |
Příčina
Hovor ISet<T>.Add nebo ICollection<T>.Remove hovor je chráněn voláním Contains. IImmutableSet<T>.Add IImmutableSet<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.