Dela via


CA1845: Använd span-baserad sträng. Concat'

Property Värde
Regel-ID CA1845
Title Använd span-baserad sträng. Concat'
Kategori Prestanda
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Som förslag

Orsak

Den här regeln letar upp strängsammanfogningsuttryck som innehåller Substring anrop och föreslår att du Substring ersätter med AsSpan och använder den spanbaserade överbelastningen av String.Concat.

Regelbeskrivning

Anrop Substring skapar en kopia av den extraherade delsträngen. Genom att använda AsSpan i stället för Substring och anropa överbelastningen för string.Concat som accepterar intervall kan du eliminera den onödiga strängallokeringen.

Så här åtgärdar du överträdelser

Så här åtgärdar du överträdelser:

  1. Ersätt strängsammanfogningen med ett anrop till string.Concat, och
  2. Ersätt anrop till Substring med anrop till AsSpan.

Följande kodfragment visar exempel på överträdelser och hur du åtgärdar dem.

using System;

class Example
{
    public void Method()
    {
        string text = "fwobz the fwutzle";

        //  Violation: allocations by Substring are wasteful.
        string s1 = text.Substring(10) + "---" + text.Substring(0, 5);

        //  Fixed: using AsSpan avoids allocations of temporary strings.
        string s2 = string.Concat(text.AsSpan(10), "---", text.AsSpan(0, 5));
    }
}

När du ska ignorera varningar

Ignorera inte varningar från den här regeln. Det finns ingen anledning att använda Substring över AsSpan när den extraherade delsträngen endast skickas till en metod med en span-baserad motsvarighet.

Se även