Dela via


Varning CA1831: Använd AsSpan i stället för Intervallbaserade indexerare för sträng

.NET-kodanalysregeln CA1831 är aktiverad som standard med början i .NET 5. Den skapar en byggvarning för all kod där en Range-baserad indexerare används på en sträng, men ingen kopia var avsedd.

Ändra beskrivning

Från och med .NET 5 innehåller .NET SDK .NET-källkodsanalyserare. Flera av dessa regler är aktiverade som standard, inklusive CA1831. Om projektet innehåller kod som bryter mot den här regeln och är konfigurerat för att behandla varningar som fel kan den här ändringen bryta mot bygget.

Regel CA1831 hittar instanser där en Range-baserad indexerare används på en sträng, men ingen kopia var avsedd. Om den Range-baserade indexeraren används direkt på en sträng för att skapa en implicit gjutning skapas en onödig kopia av den begärda delen av strängen. Till exempel:

ReadOnlySpan<char> slice = str[1..3];

CA1831 föreslår att du använder den Range-baserade indexeraren på ett strängintervall i stället. Till exempel:

ReadOnlySpan<char> slice = str.AsSpan()[1..3];

Version introducerad

5,0

  • Om du vill korrigera koden och undvika onödiga allokeringar anropar AsSpan(String) du eller AsMemory(String) innan du använder den Range-baserade indexeraren. Till exempel:

    ReadOnlySpan<char> slice = str.AsSpan()[1..3];
    
  • Om du inte vill ändra koden kan du inaktivera regeln genom att ange dess allvarlighetsgrad till suggestion eller none. Mer information finns i Konfigurera regler för kodanalys.

  • Om du vill inaktivera kodanalys helt anger du EnableNETAnalyzers till false i projektfilen. Mer information finns i EnableNETAnalyzers.

Berörda API:er