CA1507 : Utiliser nameof à la place de string

Propriété Value
Identificateur de la règle CA1507
Titre Utiliser nameof à la place de string
Catégorie Maintenabilité
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Un littéral ou une constante string qui correspond au nom d’un paramètre de la méthode conteneur ou au nom d’une propriété du type conteneur est utilisé comme argument pour une méthode.

Description de la règle

La règle CA1507 signale l’utilisation d’un littéral string comme argument pour une méthode ou un constructeur, là où une expression nameof (NameOf en Visual Basic) ajouterait de la maintenabilité. La règle se déclenche si toutes les conditions suivantes sont remplies :

  • L’argument est un littéral ou une constante string.

  • L’argument correspond à un paramètre typé string de la méthode ou du constructeur qui est appelé (autrement dit, il n’existe aucune conversion impliquée sur le site d’appel).

  • Un des deux éléments suivants :

    • Le nom déclaré du paramètre est paramName, et la valeur constante du littéral string correspond au nom d’un paramètre de la méthode ou de la fonction lambda ou locale dans laquelle la méthode ou le constructeur est appelé.

    • Le nom déclaré du paramètre est propertyName, et la valeur constante du littéral string correspond au nom d’une propriété du type dans lequel la méthode ou le constructeur est appelé.

La règle CA1507 améliore la maintenabilité du code dans les cas où le paramètre peut être renommé à l’avenir, mais où le littéral string risque de ne pas être renommé par oubli. Avec nameof, le symbole est renommé lorsque le paramètre est renommé par le biais d’une opération de refactorisation. En outre, toutes les fautes d’orthographe dans le nom du paramètre sont interceptées par le compilateur.

Comment corriger les violations

Pour corriger une violation, remplacez le littéral string par une expression nameof (NameOf en Visual Basic). Par exemple, les deux extraits de code suivants montrent une violation de la règle et comment la corriger :

public Book(string title)
{
    // Violates rule CA1507
    Title = title ?? throw new ArgumentNullException("title", "All books must have a title.");
}
public Book(string title)
{
    // Resolves rule CA1507 violation
    Title = title ?? throw new ArgumentNullException(nameof(title), "All books must have a title.");
}

Conseil

Un correctif de code est disponible pour cette règle dans Visual Studio. Pour l’utiliser, positionnez le curseur sur le littéral string et appuyez sur Ctrl+. (point). Choisissez Utiliser nameof pour exprimer les noms de symboles dans la liste des options qui est présentée.

Code fix for CA1507 - use nameof to express symbol names

Quand supprimer les avertissements

Il est sûr de supprimer une violation de cette règle si vous n’êtes pas préoccupé par la maintenance de votre code.

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 CA1507
// The code that's violating the rule is on this line.
#pragma warning restore CA1507

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.CA1507.severity = none

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

Voir aussi