Share via


CA1863: 'CompositeFormat' gebruiken

Eigenschappen Weergegeven als
Regel-id CA1863
Titel CompositeFormat gebruiken
Categorie Prestaties
Oplossing is brekend of niet-brekend Niet-brekend
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Codeaanroepen String.Format(String, Object[]) of StringBuilder.AppendFormat(String, Object[]) met een static indelingstekenreeks die niet in de cache is opgeslagen in 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.

Schendingen oplossen

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

Opmerking

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 Codeanalysewaarschuwingen onderdrukken voor meer informatie.