Avviso CA1831: usare AsSpan invece di indicizzatori basati su Range per la stringa
La regola dell'analizzatore del codice .NET CA1831 è abilitata, per impostazione predefinita, a partire da .NET 5. Genera un avviso di compilazione per qualsiasi codice in cui un indicizzatore basato su Rangeviene usato in una stringa, ma non è prevista alcuna copia.
Descrizione delle modifiche
A partire da .NET 5, .NET SDK include analizzatori del codice sorgente .NET. Diverse di queste regole sono abilitate, per impostazione predefinita, tra cui CA1831. Se il progetto contiene codice che viola questa regola ed è configurato per considerare gli avvisi come errori, questa modifica potrebbe interrompere la compilazione.
La regola CA1831 trova le istanze in cui un indicizzatore basato su Rangeviene usato in una stringa, ma non è prevista alcuna copia. Se l'indicizzatore basato su Rangeviene usato direttamente su una stringa per produrre un cast implicito, viene creata una copia non necessaria della parte richiesta della stringa. Ad esempio:
ReadOnlySpan<char> slice = str[1..3];
CA1831 suggerisce l'uso dell'indicizzatoreRange basato su un intervallo della stringa. Ad esempio:
ReadOnlySpan<char> slice = str.AsSpan()[1..3];
Versione introdotta
5.0
Azione consigliata
Per correggere il codice ed evitare allocazioni non necessarie, chiamare AsSpan(String) o AsMemory(String) prima di usare l'indicizzatore basato su Range. Ad esempio:
ReadOnlySpan<char> slice = str.AsSpan()[1..3];
Se non si vuole modificare il codice, è possibile disabilitare la regola impostandone la gravità su
suggestion
onone
. Per altre informazioni, vedere Configurare le regole di analisi del codice.Per disabilitare completamente l'analisi del codice, impostare
EnableNETAnalyzers
sufalse
nel file di progetto. Per altre informazioni, vedere EnableNETAnalyzers.
API interessate
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per