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.
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ó szabályok
- CA1832: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata a tömb ReadOnlySpan vagy ReadOnlyMemory részének lekéréséhez
- CA1833: Tartományalapú indexelők helyett AsSpan vagy AsMemory használata tömb span vagy memória részének lekéréséhez
Kapcsolódó információk
Visszajelzés
https://aka.ms/ContentUserFeedback.
Hamarosan elérhető: 2024-ben fokozatosan kivezetjük a GitHub-problémákat a tartalom visszajelzési mechanizmusaként, és lecseréljük egy új visszajelzési rendszerre. További információ:Visszajelzés küldése és megtekintése a következőhöz: