CA2011: Eigenschaft nicht innerhalb ihres Setters zuweisen
Eigenschaft | Wert |
---|---|
Regel-ID | CA2011 |
Titel | Eigenschaft nicht innerhalb ihres Setters zuweisen |
Kategorie | Zuverlässigkeit |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | Als Vorschlag |
Ursache
Einer Eigenschaft wurde versehentlich ein Wert innerhalb ihrer eigenen set-Zugriffsmethode zugewiesen.
Regelbeschreibung
Wenn Sie eine Eigenschaft innerhalb ihrer set-Zugriffsmethode sich selbst zuweisen, führt das zu einer unendlichen Kette rekursiver Aufrufe der set-Zugriffsmethode. Dadurch wird zur Laufzeit eine StackOverflowException ausgelöst. Ein solcher Fehler kommt häufig vor, wenn die Eigenschaft und das Unterstützungsfeld zum Speichern des Eigenschaftswerts ähnliche Namen aufweisen. Der Wert wurde versehentlich dem Unterstützungsfeld anstatt der Eigenschaft zugewiesen.
Behandeln von Verstößen
Sie können Verstöße korrigieren, indem Sie die betreffende Zuweisung zur Eigenschaft durch eine Zuweisung zum Unterstützungsfeld ersetzen oder stattdessen eine automatisch implementierte Eigenschaft verwenden. Der folgende Codeausschnitt zeigt beispielsweise einen Verstoß gegen die Regel und mehrere Korrekturmöglichkeiten:
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; }
}
Wann sollten Warnungen unterdrückt werden?
Warnungen für Verstöße gegen diese Regel können bedenkenlos unterdrückt werden, wenn Sie sicher sind, dass rekursive Aufrufe der set-Zugriffsmethode mit Bedingungen geschützt werden, um eine unendliche Rekursion zu verhindern.
Unterdrücken einer Warnung
Um nur eine einzelne Verletzung zu unterdrücken, fügen Sie der Quelldatei Präprozessoranweisungen hinzu, um die Regel zu deaktivieren und dann wieder zu aktivieren.
#pragma warning disable CA2011
// The code that's violating the rule is on this line.
#pragma warning restore CA2011
Um die Regel für eine Datei, einen Ordner oder ein Projekt zu deaktivieren, legen Sie den Schweregrad in der Konfigurationsdatei auf none
fest.
[*.{cs,vb}]
dotnet_diagnostic.CA2011.severity = none
Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.