Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
| 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.