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 8 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.

Siehe auch