CA1870: Użyj buforowanego wystąpienia "SearchValues"
Właściwości | Wartość |
---|---|
Identyfikator reguły | CA1870 |
Tytuł | Używanie buforowanego wystąpienia "SearchValues" |
Kategoria | Wydajność |
Poprawka powodująca niezgodność lub niezgodność | Niezgodność |
Domyślnie włączone na platformie .NET 9 | Jako sugestia |
Przyczyna
Metoda IndexOfAny
or ContainsAny
jest wywoływana z wieloma wartościami stałymi w sposób, który może skorzystać z użycia SearchValues .
Reguła nie flaguje wywołań, które używają maksymalnie pięciu wartości, ponieważ używają już optymalnej implementacji.
Opis reguły
Użycie wystąpienia buforowanego SearchValues<T> jest bardziej wydajne niż przekazywanie wartości do IndexOfAny
lub ContainsAny
bezpośrednio.
Jak naprawić naruszenia
Utwórz i buforuj SearchValues<T> wystąpienie w static readonly
polu, a następnie przekaż to wystąpienie do wywołania IndexOfAny
lub ContainsAny
.
Dostępny jest program naprawiający kod, który wykonuje tę transformację.
Przykład
Poniższy fragment kodu przedstawia dwa naruszenia 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");
}
Poniższy fragment kodu naprawia naruszenia:
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);
}
Jeśli istnieje wiele wywołań metody IndexOfAny
z tym samym zestawem wartości, s_myValues
należy użyć ponownie.
Kiedy pomijać ostrzeżenia
Można bezpiecznie pominąć to ostrzeżenie, jeśli wydajność nie jest problemem.
Pomijanie ostrzeżenia
Jeśli chcesz po prostu pominąć pojedyncze naruszenie, dodaj dyrektywy preprocesora do pliku źródłowego, aby wyłączyć, a następnie ponownie włączyć regułę.
#pragma warning disable CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870
Aby wyłączyć regułę dla pliku, folderu lub projektu, ustaw jego ważność na none
w pliku konfiguracji.
[*.{cs,vb}]
dotnet_diagnostic.CA1870.severity = none
Aby uzyskać więcej informacji, zobacz Jak pominąć ostrzeżenia dotyczące analizy kodu.