CA2245: Keine Zuweisung einer Eigenschaft zu sich selbst

Eigenschaft Wert
Regel-ID CA2245
Titel Keine Zuweisung einer Eigenschaft zu sich selbst
Kategorie Verwendung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Als Vorschlag

Ursache

Eine Eigenschaft wurde versehentlich sich selbst zugewiesen.

Regelbeschreibung

Der C#-Compiler generiert eine Warnung CS1717: Zuweisung zur gleichen Variablen. Wollten Sie etwas anderes zuweisen?, wenn ein Feld, ein lokales oder ein Parametersymbol sich selbst zugewiesen wurde. Ein solcher Fehler kommt häufig vor, wenn ein lokales, Parameter- oder Feldsymbol einen Namen aufweist, der einem anderen Symbol im Gültigkeitsbereich ähnelt. Anstatt andere Symbole auf der linken und rechten Seite der Zuweisung zu verwenden, wurde das gleiche Symbol auf beiden Seiten verwendet. Dies führt zu einer redundanten Zuweisung des Werts in sich selbst und weist im Allgemeinen auf einen Funktionsfehler hin.

Das Zuweisen einer Eigenschaft zu sich selbst ist auch ein ähnlicher funktionaler Bug für fast alle realen Fälle. In einigen extremen Fällen kann das Abrufen eines Eigenschaftswerts unerwünschte Nebenwirkungen haben, und der neue Wert der Eigenschaft unterscheidet sich vom ursprünglichen Wert. Wenn dies der Fall ist, ist die Selbstzuweisung der Eigenschaft nicht redundant und kann nicht entfernt werden. Dadurch wird verhindert, dass der Compiler eine CS1717-Warnung für die eigenständige Selbstzuweisung der Eigenschaft erzeugt, ohne einen Breaking Change für diese Fälle einzuführen.

Die Regel CA2245 zielt darauf ab, diese Lücke zu füllen. Sie meldet die Verletzung der eigenständigen Selbstzuweisung von Eigenschaften, um diese funktionalen Fehler zu beheben. Für den kleinen Satz von Eckfällen, in denen die Selbstzuweisung von Eigenschaften wünschenswert ist, können CA2245-Verstöße in der Quelle unterdrückt werden, indem ein entsprechender begründender Kommentar vorliegt.

Behandeln von Verstößen

Verwenden Sie zum Beheben von Verstößen andere Symbole auf der linken Seite und rechten Seite der Zuweisung. Der folgende Codeausschnitt zeigt beispielsweise einen Verstoß gegen die Regel und mehrere Korrekturmöglichkeiten:

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;
    }
}

Wann sollten Warnungen unterdrückt werden?

Es ist sicher, Verstöße gegen diese Regel zu unterdrücken, wenn das Abrufen eines Eigenschaftswerts Nebenwirkungen haben kann und der neue Wert der Eigenschaft sich vom ursprünglichen Wert unterscheidet. Wenn dies der Fall ist, ist die Selbstzuweisung der Eigenschaft nicht redundant. Der Unterdrückung sollte ein begründender Kommentar hinzugefügt werden, um dies als erwartetes Verhalten zu dokumentieren.

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

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

Weitere Informationen finden Sie unter Vorgehensweise: Unterdrücken von Codeanalyse-Warnungen.

Siehe auch