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, 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 jazyk C#

Příčina

Metoda IndexOfAny nebo ContainsAny je volána s mnoha konstantními hodnotami způsobem, který může místo toho využít 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 SearchValues<T> uložené v mezipaměti je efektivnější než přímé předávání hodnot do IndexOfAny nebo ContainsAny.

Jak opravit porušení

Vytvořte instanci SearchValues<T> a uložte ji do mezipaměti v poli static readonly, poté tuto instanci předejte buď do volání IndexOfAny nebo 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í IndexOfAny se stejnou sadou hodnot, s_myValues se musí 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.

Viz také