CA2241 : Indiquer le nombre correct d'arguments dans les méthodes de mise en forme
Propriété | Value |
---|---|
Identificateur de la règle | CA2241 |
Titre | Indiquer le nombre correct d'arguments dans les méthodes de mise en forme |
Catégorie | Utilisation |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
L’argument de chaîne format
passé à une méthode comme WriteLine, Write ou System.String.Format ne contient pas d’élément de format qui correspond à chaque argument d’objet, ou inversement.
Par défaut, cette règle analyse uniquement les appels aux trois méthodes mentionnées précédemment, mais cela est configurable.
Description de la règle
Les arguments des méthodes, comme WriteLine, Write et Format se composent d’une chaîne de format suivie de plusieurs instances de System.Object. La chaîne de format se compose de texte et d’éléments de format incorporés de la forme {index[,alignment][:formatString]}
. ’index’ est un entier de base zéro qui indique les objets à mettre en forme. Si un objet n’a pas d’index correspondant dans la chaîne de format, l’objet est ignoré. Si l’objet spécifié par ’index’ n’existe pas, une System.FormatException est levée au moment de l’exécution.
Comment corriger les violations
Pour corriger une violation de cette règle, fournissez un élément de format pour chaque argument d’objet, et fournissez un argument objet pour chaque élément de format.
Quand supprimer les avertissements
Ne supprimez aucun avertissement de cette règle.
Configurer le code à analyser
Utilisez les options suivantes pour configurer des méthodes supplémentaires pour exécuter cette règle.
- Méthodes de mise en forme de chaîne supplémentaires
- Déterminer automatiquement des méthodes de mise en forme de chaîne supplémentaires
Méthodes de mise en forme de chaîne supplémentaires
Vous pouvez configurer les noms des méthodes de mise en forme de chaîne supplémentaires qui doivent être analysées par cette règle. Par exemple, pour spécifier toutes les méthodes nommées MyFormat
en tant que méthodes de mise en forme de chaîne, vous pouvez ajouter la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat
Formats de nom de méthode autorisés dans la valeur d’option (séparés par |
) :
- Nom de la méthode uniquement (inclut toutes les méthodes portant le nom, quel que soit le type ou l’espace de noms conteneur)
- Noms qualifiés complets au format d’ID de documentation du symbole, avec un préfixe
M:
facultatif.
Exemples :
Valeur d’option | Récapitulatif |
---|---|
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat |
Correspond à toutes les méthodes nommées MyFormat dans la compilation. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = MyFormat1|MyFormat2 |
Correspond à toutes les méthodes nommées MyFormat1 ou MyFormat2 dans la compilation. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS.MyType.MyFormat(ParamType) |
Correspond à une méthode MyFormat donnée avec une signature complète donnée. |
dotnet_code_quality.CA2241.additional_string_formatting_methods = NS1.MyType1.MyFormat1(ParamType)|NS2.MyType2.MyFormat2(ParamType) |
Correspond à des méthodes MyFormat1 spécifiques et MyFormat2 avec une signature complète respective. |
Déterminer automatiquement des méthodes de mise en forme de chaîne supplémentaires
Au lieu de spécifier une liste explicite de méthodes de mise en forme de chaîne supplémentaires, vous pouvez configurer l’analyseur pour qu’il tente automatiquement de déterminer la méthode de mise en forme de chaîne. Par défaut, cette option est désactivée. Si l’option est activée, toute méthode ayant un paramètre string format
suivi d’un paramètre params object[]
est considérée comme une méthode de mise en forme de chaîne :
dotnet_code_quality.CA2241.try_determine_additional_string_formatting_methods_automatically = true
Exemple
L’exemple suivant montre deux violations de la règle.
Imports System
Namespace ca2241
Class CallsStringFormat
Sub CallFormat()
Dim file As String = "file name"
Dim errors As Integer = 13
' Violates the rule.
Console.WriteLine(String.Format("{0}", file, errors))
Console.WriteLine(String.Format("{0}: {1}", file, errors))
' Violates the rule and generates a FormatException at runtime.
Console.WriteLine(String.Format("{0}: {1}, {2}", file, errors))
End Sub
End Class
End Namespace
class CallsStringFormat
{
void CallFormat()
{
string file = "file name";
int errors = 13;
// Violates the rule.
Console.WriteLine(string.Format("{0}", file, errors));
Console.WriteLine(string.Format("{0}: {1}", file, errors));
// Violates the rule and generates a FormatException at runtime.
Console.WriteLine(string.Format("{0}: {1}, {2}", file, errors));
}
}