CA1870: Použití instance SearchValues uložené v mezipaměti
Vlastnost | Hodnota |
---|---|
ID pravidla | CA1870 |
Název | Použití instance SearchValues uložené v mezipaměti |
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
Volá se IndexOfAny
metoda s ContainsAny
mnoha konstantními hodnotami způsobem, který může místo toho využít výhod.SearchValues
Pravidlo neoznačí volání, která používají až pět hodnot, protože ty už používají optimální implementaci.
Popis pravidla
Použití instance uložené SearchValues<T> v mezipaměti je efektivnější než předávání hodnot IndexOfAny
přímo nebo ContainsAny
přímo.
Jak opravit porušení
Vytvořte instanci a vložte ji do mezipaměti SearchValues<T> v static readonly
poli a pak ji předejte do IndexOfAny
volání.ContainsAny
Je k dispozici oprava kódu , která tuto transformaci automaticky provede.
Příklad
Následující fragment kódu ukazuje dvě porušení CA1870:
static readonly char[] MyValues = new[] { 'a', 'b', 'c', 'x', 'y', 'z' };
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(MyValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept("abcxyz");
}
Následující fragment kódu opravuje porušení:
private static readonly SearchValues<char> s_myValues = SearchValues.Create("abcxyz");
static int IndexOfMyValues(ReadOnlySpan<char> text)
{
return text.IndexOfAny(s_myValues);
}
static bool ContainsOnlyMyValues(ReadOnlySpan<char> text)
{
return !text.ContainsAnyExcept(s_myValues);
}
Pokud existuje více volání se IndexOfAny
stejnou sadou hodnot, s_myValues
mělo by se znovu použít.
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 CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870
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.CA1870.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.