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.
Règles associées
- CS1717 : Assignation effectuée à la même variable ; souhaitiez-vous assigner un autre élément ?
- CA2011 : Ne pas assigner la propriété dans son setter
- CA2246 : Ne pas attribuer un symbole et son membre dans la même instruction