Partage via


CA2207 : Initialisez les champs statiques des types valeur en ligne

Propriété Value
Identificateur de la règle CA2207
Titre Initialisez les champs statiques des types valeur en ligne
Catégorie Utilisation
Le correctif est cassant ou non cassant Sans rupture
Activé par défaut dans .NET 8 Non

Cause

Un type valeur déclare un constructeur statique explicite.

Description de la règle

Lorsqu’un type valeur est déclaré, il subit une initialisation par défaut où tous les champs de type valeur sont définis sur zéro et tous les champs de type référence sont définis sur null (Nothing en Visual Basic). Un constructeur statique explicite ne peut s’exécuter qu’avant l’appel d’un constructeur d’instance ou d’un membre statique du type. Par conséquent, si le type est créé sans appeler un constructeur d’instance, l’exécution du constructeur statique n’est pas garantie.

Si toutes les données statiques sont initialisées inline et qu’aucun constructeur statique explicite n’est déclaré, les compilateurs C# et Visual Basic ajoutent l’indicateur beforefieldinit à la définition de classe CIL. Les compilateurs ajoutent également un constructeur statique privé qui contient le code d’initialisation statique. Ce constructeur statique privé est garanti pour s’exécuter avant l’accès aux champs statiques du type.

Comment corriger les violations

Pour corriger une violation de cette règle, initialisez toutes les données statiques lorsqu’elles sont déclarées et supprimez le constructeur statique.

Quand supprimer les avertissements

Ne supprimez aucun avertissement de cette règle.

CA1810 : Initialisez les champs statiques de type référence en ligne