Megosztás a következőn keresztül:


CA1870: Gyorsítótárazott "SearchValues" példány használata

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 kompatibilitástörő vagy nem törik Nem törés
Alapértelmezés szerint engedélyezve a .NET 8-ban Javaslatként

Ok

Egy IndexOfAny vagy ContainsAny több állandó értékkel rendelkező metódust olyan módon hívunk meg, amely hasznos lehet a használatban SearchValues .

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ányok használata hatékonyabb, mint az értékek közvetlen vagy ContainsAny közvetlen átadásaIndexOfAny.

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

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

Elérhető egy kódjavító, amely 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.