Share via


CA2207: Initiera statiska fält av värdetyp infogade

Property Värde
Regel-ID CA2207
Title Initiera statiska fält av värdetyp
Kategori Användning
Korrigeringen är icke-bakåtkompatibel Icke-icke-bryta
Aktiverad som standard i .NET 8 Nej

Orsak

En värdetyp deklarerar en explicit statisk konstruktor.

Regelbeskrivning

När en värdetyp deklareras genomgår den en standardinitiering där alla fält av värdetyp är inställda på noll och alla fält av referenstyp anges till null (Nothing i Visual Basic). En explicit statisk konstruktor kan bara köras innan en instanskonstruktor eller statisk medlem av typen anropas. Om typen skapas utan att anropa en instanskonstruktor är den statiska konstruktorn därför inte garanterad att köras.

Om alla statiska data initieras infogade och ingen explicit statisk konstruktor deklareras lägger C#- och Visual Basic-kompilatorerna till beforefieldinit flaggan i CIL-klassdefinitionen. Kompilatorerna lägger också till en privat statisk konstruktor som innehåller den statiska initieringskoden. Den här privata statiska konstruktorn kommer garanterat att köras innan några statiska fält av typen används.

Så här åtgärdar du överträdelser

Åtgärda ett brott mot den här regeln genom att initiera alla statiska data när de deklareras och ta bort den statiska konstruktorn.

När du ska ignorera varningar

Ignorera inte en varning från den här regeln.

CA1810: Initiera statiska fält av referenstyp infogade