CA1028 : Enum Storage doit être Int32
Propriété | Value |
---|---|
Identificateur de la règle | CA1028 |
Titre | Enum Storage doit être Int32 |
Catégorie | Conception |
Le correctif est cassant ou non cassant | Rupture |
Activé par défaut dans .NET 8 | Non |
Cause
Le type sous-jacent d’une énumération n’est pas System.Int32.
Par défaut, cette règle examine uniquement les énumérations visibles en externe, mais elle est configurable.
Description de la règle
Une énumération est un type valeur qui définit un jeu de constantes nommées associées. Par défaut, le type de données utilisé pour stocker la valeur de constante est System.Int32. Bien que ce type sous-jacent soit modifiable, ce n’est ni nécessaire, ni recommandé dans la plupart des scénarios. Aucun gain de performances significatif n’est obtenu à l’aide d’un type de données inférieur à Int32. Si vous ne pouvez pas utiliser le type de données par défaut, vous devez opter pour l’un des types intégraux compatibles CLS (Common Language System), Byte, Int16, Int32 ou Int64, pour que toutes les valeurs de l’énumération puissent être représentées dans les langages de programmation compatibles CLS.
Comment corriger les violations
Pour corriger une violation de cette règle, hors problèmes de taille et de compatibilité, utilisez Int32. Dans le cas où Int32 n’est pas assez grand pour contenir les valeurs, choisissez Int64. Si un type de données plus petit est nécessaire à des fins de compatibilité descendante, optez pour Byte ou Int16.
Quand supprimer les avertissements
Ne supprimez un avertissement de cette règle qu’en cas de problèmes de compatibilité descendante. Dans les applications, le non-respect de cette règle ne pose généralement pas de problèmes. Il peut en revanche nuire à vos utilisateurs dans les bibliothèques, où l’interopérabilité entre les langages est requise.
Supprimer un avertissement
Si vous voulez supprimer une seule violation, ajoutez des directives de préprocesseur à votre fichier source pour désactiver et réactiver la règle.
#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
Pour désactiver la règle sur un fichier, un dossier ou un projet, définissez sa gravité sur none
dans le fichier de configuration.
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
Pour plus d’informations, consultez Comment supprimer les avertissements de l’analyse de code.
Configurer le code à analyser
Utilisez l’option suivante pour configurer les parties de votre codebase sur lesquelles exécuter cette règle.
Vous pouvez configurer cette option pour cette règle uniquement, pour toutes les règles auxquelles elle s’applique ou pour toutes les règles de cette catégorie (Conception) auxquelles elle s’applique. Pour plus d’informations, consultez Options de configuration des règles de qualité du code.
Inclure des surfaces d’API spécifiques
Vous pouvez configurer les parties de votre codebase sur lesquelles exécuter cette règle, en fonction de leur accessibilité. Par exemple, pour spécifier que la règle doit s’exécuter uniquement sur la surface d’API non publique, ajoutez la paire clé-valeur suivante à un fichier .editorconfig dans votre projet :
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exemple
L’exemple suivant montre deux énumérations qui n’utilisent pas le type de données sous-jacent recommandé.
[Flags]
public enum Days : uint
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : sbyte
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As UInteger
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As SByte
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
L’exemple suivant corrige la violation précédente en replaçant le type de données sous-jacent par Int32.
[Flags]
public enum Days : int
{
None = 0,
Monday = 1,
Tuesday = 2,
Wednesday = 4,
Thursday = 8,
Friday = 16,
All = Monday | Tuesday | Wednesday | Thursday | Friday
}
public enum Color : int
{
None = 0,
Red = 1,
Orange = 3,
Yellow = 4
}
<Flags()>
Public Enum Days As Integer
None = 0
Monday = 1
Tuesday = 2
Wednesday = 4
Thursday = 8
Friday = 16
All = Monday Or Tuesday Or Wednesday Or Thursday Or Friday
End Enum
Public Enum Color As Integer
None = 0
Red = 1
Orange = 3
Yellow = 4
End Enum
Règles associées
- CA1008 : Les énumérations doivent avoir la valeur zéro
- CA1027 : Marquez les énumérations avec FlagsAttribute
- CA2217 : Ne marquez pas les énumérations avec FlagsAttribute
- CA1700 : Ne nommez pas les valeurs d’énumération 'Reserved'
- CA1712 : Ne préfixez pas les valeurs d’énumération avec le nom du type