CA1863: 'CompositeFormat' gebruiken

Eigenschap Waarde
Regel-id CA1863
Titel CompositeFormat gebruiken
Categorie Prestaties
Fix kan brekend of niet-brekend zijn Niet-brekend
Standaard ingeschakeld in .NET 10 Nee
Toepasselijke talen C# en Visual Basic

Oorzaak

Codeaanroepen String.Format(String, Object[]) of StringBuilder.AppendFormat(String, Object[]) met een static formattekenreeks die niet is opgeslagen in de cache van een CompositeFormat exemplaar.

Beschrijving van regel

Het is duur om een notatietekenreeks tijdens runtime te parseren. Met deze regel worden locaties in uw code gevonden waar u een CompositeFormat exemplaar kunt opslaan en gebruiken als het argument voor een opmaakbewerking, in plaats van de oorspronkelijke notatietekenreeks door te geven. Een CompositeFormat exemplaar parseert de samengestelde opmaaktekenreeks wanneer deze wordt gemaakt, wat betekent dat het 'dynamische pad' van tekenreeksopmaak veel sneller kan worden uitgevoerd.

Hoe schendingen op te lossen

Maak een exemplaar van CompositeFormat door CompositeFormat.Parse(String) aan te roepen en geef het door aan String.Format(IFormatProvider, CompositeFormat, Object[]) of StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) in plaats van de oorspronkelijke opmaakreeks.

Voorbeeld

In het volgende voorbeeld ziet u twee schendingen van de regel:

class C
{
    private static readonly string StaticField = "Format one value: {0}";

    static void Main()
    {
        _ = string.Format(StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(StaticField, 42);
    }
}

In het volgende voorbeeld ziet u code waarmee beide schendingen worden opgelost:

class C
{
    private static readonly CompositeFormat StaticField = CompositeFormat.Parse("Format one value: {0}");

    static void Main()
    {
        _ = string.Format(null, StaticField, 42);

        StringBuilder sb = new();
        sb.AppendFormat(null, StaticField, 42);
    }
}

Wanneer waarschuwingen onderdrukken

Het is veilig om diagnostische gegevens van deze regel te onderdrukken als de prestaties geen probleem zijn.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none

Zie voor meer informatie Hoe codeanalysewaarschuwingen te onderdrukken.