Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
| 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.
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;
// ...
}
När du ska ignorera varningar
Ignorera inte en varning från den här regeln.