Événement
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenantCe navigateur n’est plus pris en charge.
Effectuez une mise à niveau vers Microsoft Edge pour tirer parti des dernières fonctionnalités, des mises à jour de sécurité et du support technique.
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ée par défaut dans .NET 9 | Non |
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.
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.
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.
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.
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.
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.
Vous pouvez configurer les parties de votre codebase sur lesquelles exécuter cette règle, en fonction de leur accessibilité, en définissant l’option api_surface. 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
Note
Remplacez la partie XXXX
de CAXXXX
par l’ID de la règle applicable.
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
Commentaires sur .NET
.NET est un projet open source. Sélectionnez un lien pour fournir des commentaires:
Événement
Créer des applications intelligentes
17 mars, 21 h - 21 mars, 10 h
Rejoignez la série de rencontres pour créer des solutions IA évolutives basées sur des cas d’usage réels avec d’autres développeurs et experts.
S’inscrire maintenant