Freigeben über


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.

CA1810: Statische Felder von Referenztypen inline initialisieren.