Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
| 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.