CA1870: Használjon egy gyorsítótárazott "SearchValues" példányt

Tulajdonság Érték
Szabályazonosító CA1870
Cím Gyorsítótárazott "SearchValues" példány használata
Kategória Teljesítmény
A javítás romboló vagy nem romboló Nem törhető
Alapértelmezés szerint engedélyezve a .NET 10-ben Javaslatként
Alkalmazandó nyelvek C#

Ok

Egy IndexOfAny vagy ContainsAny metódust hívunk meg több állandó értékkel, amely helyett hasznosabb lehet SearchValues használata.

A szabály nem jelöli meg az legfeljebb öt értéket használó hívásokat, mivel ezek már optimális implementációt használnak.

Szabály leírása

A gyorsítótárazott SearchValues<T> példány használata hatékonyabb, mint az értékek közvetlen átadása IndexOfAny vagy ContainsAny számára.

Szabálysértések kijavítása

Hozzon létre és gyorsítótárazzon egy SearchValues<T> példányt egy static readonly mezőben, majd adja át azt a IndexOfAny vagy ContainsAny hívásnak.

Elérhető egy kódjavítási, amely automatikusan végrehajtja ezt az átalakítást.

Példa

A következő kódrészlet a CA1870 két szabálysértést mutat be:

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");
}

A következő kódrészlet kijavítja a szabálysértéseket:

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);
}

Ha több hívás is IndexOfAny ugyanarra az értékkészletre vonatkozik, s_myValues akkor újra fel kell használni.

Mikor kell letiltani a figyelmeztetéseket?

Ha a teljesítmény nem okoz problémát, nyugodtan el lehet tiltani ezt a figyelmeztetést.

Figyelmeztetés mellőzése

Ha csak egyetlen szabálysértést szeretne letiltani, adjon hozzá előfeldolgozási irányelveket a forrásfájlhoz a szabály letiltásához és újbóli engedélyezéséhez.

#pragma warning disable CA1870
// The code that's violating the rule is on this line.
#pragma warning restore CA1870

Ha le szeretné tiltani egy fájl, mappa vagy projekt szabályát, állítsa annak súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_diagnostic.CA1870.severity = none

További információ: Kódelemzési figyelmeztetések letiltása.

Lásd még