Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
| Vlastnost | Hodnota |
|---|---|
| ID pravidla | CA1863 |
| Název | Použijte CompositeFormat |
| Kategorie | Výkon |
| Oprava, která může být destruktivní nebo nedestruktivní | Nezlomitelný |
| Povoleno ve výchozím nastavení v .NET 10 | Ne |
| Příslušné jazyky | C# a Visual Basic |
Příčina
Volání kódu String.Format(String, Object[]) nebo StringBuilder.AppendFormat(String, Object[]) s formátovacím řetězcem static, který nebyl uložen do mezipaměti instance CompositeFormat.
Popis pravidla
Parsování řetězce formátu za běhu je nákladné. Toto pravidlo vyhledá místa v kódu, kde můžete kešovat a používat instanci CompositeFormat jako argument formátovací operace, namísto předávání původního formátovacího řetězce. Instance CompositeFormat analyzuje složený formátovací řetězec při jeho vytvoření, což znamená, že "horká cesta" formátování řetězce může být mnohem rychlejší.
Jak opravit porušení
Vytvořte instanci CompositeFormat voláním CompositeFormat.Parse(String) a předáním do String.Format(IFormatProvider, CompositeFormat, Object[]) nebo StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) místo původního řetězce formátu.
Příklad
Následující příklad ukazuje dvě porušení pravidla:
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);
}
}
Následující příklad ukazuje kód, který opravuje obě porušení:
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);
}
}
Kdy potlačit upozornění
Pokud výkon není problém, je bezpečné potlačit diagnostiku z tohoto pravidla.
Potlačení upozornění
Pokud chcete pouze potlačit jedno porušení, přidejte do zdrojového souboru direktivy preprocesoru, abyste pravidlo zakázali a znovu povolili.
#pragma warning disable CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863
Pokud chcete pravidlo pro soubor, složku nebo projekt zakázat, nastavte jeho závažnost v none konfiguračním souboru.
[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none
Další informace naleznete v tématu Jak potlačit upozornění analýzy kódu.