CA2011 : Ne pas assigner la propriété dans son setter
Propriété | Value |
---|---|
Identificateur de la règle | CA2011 |
Titre | Ne pas assigner la propriété dans son setter |
Catégorie | Fiabilité |
Le correctif est cassant ou non cassant | Sans rupture |
Activé par défaut dans .NET 8 | À titre de suggestion |
Cause
Une propriété a été affectée accidentellement à une valeur au sein de son propre accesseur set.
Description de la règle
L’assignation d’une propriété à elle-même dans son accesseur set conduit à une chaîne infinie d’appels récursifs à l’accesseur set. Il en résulte une StackOverflowException à l’exécution. Une telle erreur est courante lorsque la propriété et le champ de stockage permettant de stocker la valeur de propriété portent un nom similaire. La valeur a été accidentellement assignée à la propriété elle-même au lieu du champ de stockage.
Comment corriger les violations
Pour corriger les violations, remplacez l’assignation à la propriété qui pose problème par une assignation au champ de stockage ou passez à une propriété automatique. Par exemple, l’extrait de code suivant montre une violation de la règle et indique comment la corriger :
public class C
{
// Backing field for property 'P'
private int p;
public int P
{
get
{
return p;
}
set
{
// CA2011: Accidentally assigned to property, instead of the backing field.
P = value;
}
}
}
public class C
{
// Backing field for property 'P'
private int _p;
public int P
{
get
{
return _p;
}
set
{
// Option 1: Assign to backing field and rename the backing field for clarity.
_p = value;
}
}
}
public class C
{
// Option 2: Use auto-property.
public int P { get; set; }
}
Quand supprimer les avertissements
Il est préférable de supprimer les violations de cette règle si vous avez la certitude que les appels récursifs à l’accesseur set sont assortis d’une protection conditionnelle qui empêche la récursivité infinie.
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 CA2011
// The code that's violating the rule is on this line.
#pragma warning restore CA2011
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.CA2011.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Règles associées
Voir aussi
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour