Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
| Eigenschaft | Wert |
|---|---|
| Regel-ID | CA2207 |
| Titel | Statische Felder von Werttypen inline initialisieren. |
| Kategorie | Verwendung |
| Fix führt zu Unterbrechungen oder bleibt funktionsfähig | Untrennbar |
| Standardmäßig in .NET 10 aktiviert | Nein |
| Anwendbare Sprachen | C# und Visual Basic |
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 garantiert ausgeführt, bevor ein Instanzkonstruktor oder ein statisches Mitglied des Typs aufgerufen wird. 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.
So beheben Sie Verstöße
Initialisieren Sie alle statischen Daten nach deren Deklaration, und entfernen Sie den statischen Konstruktor, um einen Verstoß gegen diese Regel zu korrigieren.
Example
// This struct violates the rule.
struct BadStruct
{
private static readonly int s_first;
private static readonly int s_second;
static BadStruct()
{
s_first = 1;
s_second = 2;
}
// ...
}
// This struct satisfies the rule.
struct GoodStruct
{
private static readonly int s_first = 1;
private static readonly int s_second = 2;
// ...
}
Wann sollten Warnungen unterdrückt werden?
Unterdrücken Sie keine Warnung dieser Regel.
Verwandte Regeln
CA1810: Statische Felder von Referenztypen inline initialisieren.