CA1805: Keine unnötige Initialisierung.

Eigenschaft Wert
Regel-ID CA1805
Titel Keine unnötige Initialisierung.
Kategorie Leistung
Fix führt oder führt nicht zur Unterbrechung Nicht unterbrechend
Standardmäßig in .NET 8 aktiviert Nein

Ursache

Ein Feld einer Klasse wird explizit mit dem Standardwert für den Typ dieses Felds initialisiert.

Regelbeschreibung

Die .NET-Runtime initialisiert alle Felder von Verweistypen mit ihren Standardwerten, bevor der Konstruktor ausgeführt wird. In den meisten Fällen ist das explizite Initialisieren eines Felds auf seinen Standardwert in einem Konstruktor redundant. Dies führt zu mehr Wartungskosten und möglicherweise schlechterer Leistung (z. b. bei erhöhter Assembly-Größe). Die explizite Initialisierung kann entfernt werden.

Behandeln von Verstößen

In den meisten Fällen besteht die richtige Behebung darin, die unnötige Initialisierung zu löschen.

class C
{
    // Violation
    int _value1 = 0;

    // Fixed
    int _value1;
}

In einigen Fällen kann das Löschen der Initialisierung dazu führen, dass nachfolgende CS0649-Warnungen ausgegeben werden, weil das Feld den Standardwert für immer beibehalten hat. In solchen Fällen kann es besser sein, das Feld vollständig zu löschen oder durch eine Eigenschaft zu ersetzen:

class C
{
    // Violation
    private static readonly int s_value = 0;

    // Fixed
    private static int Value => 0;
}

Wann sollten Warnungen unterdrückt werden?

Es ist immer sicher, die Warnung zu unterdrücken, da die Warnung einfach potenziell unnötigen Code und die Arbeit hervorhebt, die möglicherweise vermieden werden.

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

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

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

Siehe auch