CA1863 : utiliser « CompositeFormat »

Propriété Value
Identificateur de la règle CA1863
Titre Utilisez CompositeFormat.
Catégorie Performances
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Appels de code String.Format(String, Object[]) ou StringBuilder.AppendFormat(String, Object[]) avec une chaîne de format static qui n’a pas été mise en cache dans une instance CompositeFormat.

Description de la règle

Il est coûteux d’analyser une chaîne de format au moment de l’exécution. Cette règle localise les emplacements dans votre code où vous pouvez mettre en cache et utiliser une instance CompositeFormat comme argument d’une opération de mise en forme, plutôt que de transmettre la chaîne de format d’origine. Une instance CompositeFormat analyse la chaîne de format composite lorsqu’elle est créée, ce qui signifie que le « chemin d’accès chaud » de la mise en forme de chaîne peut s’exécuter beaucoup plus rapidement.

Comment corriger les violations

Créez une instance de CompositeFormat en appelant CompositeFormat.Parse(String) et transmettez-la à String.Format(IFormatProvider, CompositeFormat, Object[]) ou StringBuilder.AppendFormat(IFormatProvider, CompositeFormat, Object[]) au lieu de la chaîne de format d’origine.

Exemple

L’exemple suivant montre deux violations de la règle :

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);
    }
}

L’exemple suivant montre le code qui corrige les deux violations :

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);
    }
}

Quand supprimer les avertissements

Vous pouvez supprimer les diagnostics de cette règle si les performances ne sont pas un problème.

Supprimer un avertissement

Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.

#pragma warning disable CA1863
// The code that's violating the rule is on this line.
#pragma warning restore CA1863

Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none dans le fichier de configuration.

[*.{cs,vb}]
dotnet_diagnostic.CA1863.severity = none

Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.