CA2207: Statische Felder für Werttyp inline initialisieren.
Eigenschaft | Wert |
---|---|
Regel-ID | CA2207 |
Titel | Statische Felder für Werttyp inline initialisieren. |
Kategorie | Verwendung |
Fix führt oder führt nicht zur Unterbrechung | Nicht unterbrechend |
Standardmäßig in .NET 9 aktiviert | No |
Ursache
Ein Werttyp deklariert einen expliziten statischen Konstruktor.
Regelbeschreibung
Wenn ein Werttyp deklariert wird, wird eine Standardinitialisierung durchgeführt, bei der alle Werttypfelder auf 0 (null) und alle Verweistypfelder auf null
(Nothing
in Visual Basic) festgelegt sind. Ein expliziter statischer Konstruktor wird nur vor dem Aufruf eines Instanzkonstruktors oder statischen Members des Typs garantiert ausgeführt. Wenn der Typ ohne einen Aufruf eines Instanzkonstruktors erstellt wird, wird der statische Konstruktor daher nicht garantiert ausgeführt.
Wenn alle statischen Daten inline initialisiert werden und kein expliziter statischer Konstruktor deklariert wird, fügen die Compiler C# und Visual Basic der CIL-Klassendefinition das beforefieldinit
Flag hinzu. Die Compiler fügen auch einen privaten statischen Konstruktor hinzu, der den statischen Initialisierungscode enthält. Dieser private statische Konstruktor wird garantiert ausgeführt, bevor auf statische Felder des Typs zugegriffen wird.
Behandeln von Verstößen
Initialisieren Sie alle statischen Daten nach deren Deklaration, und entfernen Sie den statischen Konstruktor, um einen Verstoß gegen diese Regel zu korrigieren.
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Verwandte Regeln
CA1810: Statische Felder von Referenztypen inline initialisieren.