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.