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 9 | 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.