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.