CA1831: Ha szükséges, tartományalapú indexelők helyett AsSpan használata sztringekhez

Tulajdonság Érték
Szabályazonosító CA1831
Cím Az AsSpan használata tartományalapú indexelők helyett sztringhez, ha szükséges
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 Figyelmeztetésként

Ok

Egy tartományindexelőt használ egy sztringen, és az érték implicit módon hozzá van rendelve.ReadOnlySpan<char>

Szabály leírása

Ez a szabály akkor aktiválódik, ha tartományindexelőt használ egy sztringen, és egy span típushoz rendeli. A tartományindexelő egy Span<T> nem másolási Slice művelet, de egy sztring tartományindexelője esetében a metódust fogja használni a rendszer ahelyettSlice, hogy a metódust Substring használjuk. Ezzel másolatot készít a sztring kért részéről. Ez a másolat általában szükségtelen, ha implicit módon használják értékként vagy ReadOnlyMemory<T> értékkéntReadOnlySpan<T>. Ha a másolat nem a cél, használja a AsSpan metódust a szükségtelen másolás elkerüléséhez. Ha a másolat célja, először rendelje hozzá egy helyi változóhoz, vagy adjon hozzá egy explicit leadott példányt. Az elemző csak akkor jelenti, ha implicit leadás van használva a tartományindexelő művelet eredményén.

Észleli

Implicit konverzió:

ReadOnlySpan<char> slice = str[a..b];

Nem észleli

Explicit átalakítás:

ReadOnlySpan<char> slice = (ReadOnlySpan<char>)str[a..b];

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

A szabály megsértésének kijavításához használja AsSpan a Rangesztring -based indexelője helyett, hogy elkerülje a szükségtelen adatmásolatok létrehozását.

public void TestMethod(string str)
{
    // The violation occurs
    ReadOnlySpan<char> slice = str[1..3];
    ...
}
public void TestMethod(string str)
{
    // The violation fixed with AsSpan extension method
    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    ...
}

Tipp.

Ehhez a szabályhoz kódjavítás érhető el a Visual Studióban. A használathoz helyezze a kurzort a szabálysértésre, és nyomja le a Ctrl+ billentyűt. (pont). Válassza az AsSpan használata a tartományalapú indexelő helyett egy sztringen a megjelenő lehetőségek listájából.

Code fix for CA1831 - Use AsSpan instead of Range-based indexers when appropriate

A figyelmeztetés elkerülése érdekében explicit castet is hozzáadhat.

public void TestMethod(string str)
{
    // The violation occurs.
    ReadOnlySpan<char> slice = str[1..3];
    ...
}
public void TestMethod(string str)
{
    // The violation avoided with explicit casting.
    ReadOnlySpan<char> slice = (ReadOnlySpan<char>)str[1..3];
    ...
}

Mikor kell letiltani a figyelmeztetéseket?

Ha másolatot szeretne létrehozni, nyugodtan letilthatja a szabály megsértését.

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 CA1831
// The code that's violating the rule is on this line.
#pragma warning restore CA1831

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.CA1831.severity = none

A teljes szabálykategória letiltásához állítsa be a kategória súlyosságát none a konfigurációs fájlban.

[*.{cs,vb}]
dotnet_analyzer_diagnostic.category-Performance.severity = none

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

Kapcsolódó információk