Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| Egenskap | Värde |
|---|---|
| Regel-ID | CA1863 |
| Title | Använd CompositeFormat |
| Kategori | Prestanda |
| Korrigeringen är antingen invasiv eller icke-invasiv | Oumbrytbar |
| Aktiverad som standard i .NET 10 | Nej |
| Tillämpliga språk | C# och Visual Basic |
Orsak
Koden anropar String.Format(String, Object[]) eller StringBuilder.AppendFormat(String, Object[]) med en static formatsträng som inte har cachelagrats till en CompositeFormat instans.
Regelbeskrivning
Det är dyrt att tolka en formatsträng under körningstid. Den här regeln identifierar platser i din kod där du kan cachelagra och använda en CompositeFormat-instans som argument för en formateringsoperation, istället för att skicka in en ursprunglig formatsträng. En CompositeFormat instans parsar den sammansatta formatsträngen när den skapas, vilket innebär att strängformateringens "heta sökväg" kan köras mycket snabbare.
Så här åtgärdar du överträdelser
Skapa en instans av CompositeFormat genom att anropa CompositeFormat.Parse(String) och skicka den till String.Format(IFormatProvider, CompositeFormat, Object[]) eller StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) i stället för den ursprungliga formatsträngen.
Exempel
I följande exempel visas två överträdelser av regeln:
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);
}
}
I följande exempel visas kod som åtgärdar båda överträdelserna:
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);
}
}
När du ska ignorera varningar
Det är säkert att förhindra diagnostik från den här regeln om prestanda inte är ett problem.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.