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.