CA2245 : Ne pas attribuer une propriété à elle-même

Propriété Value
Identificateur de la règle CA2245
Titre Ne pas attribuer une propriété à elle-même
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Comme suggestion

Cause

Une propriété a été attribuée accidentellement à elle-même.

Description de la règle

Le compilateur C# génère un avertissement CS1717 : Assignation effectuée à la même variable ; souhaitiez-vous assigner un autre élément ? lorsqu’un symbole de champ, local ou de paramètre est attribué à lui-même. Une telle erreur est courante lorsqu’un symbole local, un paramètre ou un symbole de champ a un nom similaire à un autre symbole dans l’étendue. Au lieu d’utiliser des symboles différents sur les côtés gauche et droit de l’affectation, le même symbole a été utilisé des deux côtés. Cela conduit à une affectation redondante de la valeur à elle-même et indique généralement un bogue fonctionnel.

L’attribution d’une propriété à elle-même est également un bogue fonctionnel similaire pour presque tous les cas réels. Toutefois, dans certains cas extrêmes, l’extraction d’une valeur de propriété peut avoir des effets secondaires, et la nouvelle valeur de la propriété est différente de la valeur d’origine. Si c’est le cas, l’attribution automatique de propriété n’est pas redondante et ne peut pas être supprimée. Cela empêche le compilateur de générer un avertissement CS1717 pour l’attribution automatique de propriété, sans introduire de changement cassant pour ces cas.

La règle CA2245 vise à combler cette lacune. Elle signale la violation de l’auto-affectation de propriété pour aider à résoudre ces bogues fonctionnels. Pour le petit ensemble de cas où l’auto-affectation de propriété est souhaitable, les violations CA2245 peuvent être supprimées dans la source avec un commentaire de justification approprié.

Comment corriger les violations

Pour corriger les violations, utilisez différents symboles à gauche et à droite de l’affectation. Par exemple, l’extrait de code suivant montre une violation de la règle et comment la corriger :

public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // CS1717: Accidentally assigned the parameter 'p' to itself.
        p = p;

        // CA2245: Accidentally assigned the property 'P' to itself.
        P = P;
    }
}
public class C
{
    private int p = 0;
    public int P { get; private set; }

    public void M(int p)
    {
        // No violation, now the parameter is assigned to the field.
        this.p = p;

        // No violation, now the parameter is assigned to the property.
        P = p;
    }
}

Quand supprimer les avertissements

Il est prudent de supprimer les violations de cette règle si l’extraction d’une valeur de propriété peut avoir des effets secondaires et que la nouvelle valeur de la propriété est différente de la valeur d’origine. Si c’est le cas, l’attribution automatique de propriété n’est pas redondante. Un commentaire de justification doit être ajouté à la suppression pour documenter ce comportement comme prévu.

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

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

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

Voir aussi