CA1863: Použijte CompositeFormat

Vlastnost Hodnota
ID pravidla CA1863
Název Použití CompositeFormat
Kategorie Výkon
Oprava způsobující chybu nebo chybu způsobující chybu Nenarušující
Povoleno ve výchozím nastavení v .NET 8 No

Příčina

Volání String.Format(String, Object[]) kódu nebo StringBuilder.AppendFormat(String, Object[]) formátovací static řetězec, který nebyl uložen do mezipaměti instance CompositeFormat .

Popis pravidla

Analýza formátového řetězce je náročná za běhu. Toto pravidlo vyhledá místa v kódu, kde můžete ukládat do mezipaměti a používat CompositeFormat instanci jako argument operace formátování, a ne předání původního řetězce formátu. 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.