CA1028 : Enum Storage doit être Int32CA1028: Enum storage should be Int32

TypeNameTypeName EnumStorageShouldBeInt32EnumStorageShouldBeInt32
CheckIdCheckId CA1028CA1028
CategoryCategory Microsoft.DesignMicrosoft.Design
Modification avec ruptureBreaking Change RuptureBreaking

CauseCause

Le type sous-jacent d’une énumération publique n’est pas System.Int32.The underlying type of a public enumeration is not System.Int32.

Description de la règleRule description

Une énumération est un type valeur qui définit un jeu de constantes nommées associées.An enumeration is a value type that defines a set of related named constants. Par défaut, le System.Int32 type de données est utilisé pour stocker la valeur de constante.By default, the System.Int32 data type is used to store the constant value. Même si vous pouvez modifier ce type sous-jacent, il n’est pas nécessaire ni recommandé pour la plupart des scénarios.Even though you can change this underlying type, it is not necessary or recommended for most scenarios. Notez qu’aucun gain de performances de manière significative n’est effectué à l’aide d’un type de données est inférieur à Int32.Note that no significant performance gain is achieved by using a data type that is smaller than Int32. Si vous ne pouvez pas utiliser le type de données par défaut, vous devez utiliser une de le système CLS (Common Language)-des types intégraux conformes, Byte, Int16, Int32, ou Int64 pour vous assurer que toutes les valeurs de l’énumération peuvent être représentées dans Langages de programmation conformes CLS.If you cannot use the default data type, you should use one of the Common Language System (CLS)-compliant integral types, Byte, Int16, Int32, or Int64 to make sure that all values of the enumeration can be represented in CLS-compliant programming languages.

Comment corriger les violationsHow to fix violations

Pour corriger une violation de cette règle, sauf si les problèmes de compatibilité ou de taille existent, utilisez Int32.To fix a violation of this rule, unless size or compatibility issues exist, use Int32. Pour les situations où Int32 n’est pas assez grand pour contenir les valeurs, utilisez Int64.For situations where Int32 is not large enough to hold the values, use Int64. Si la compatibilité descendante requiert un type de données plus petits, utilisez Byte ou Int16.If backward compatibility requires a smaller data type, use Byte or Int16.

Quand supprimer les avertissementsWhen to suppress warnings

Supprimer un avertissement de cette règle uniquement si des problèmes de compatibilité descendante le requièrent.Suppress a warning from this rule only if backward compatibility issues require it. Dans les applications, non-respect de cette règle généralement ne provoque pas de problèmes.In applications, failure to comply with this rule usually does not cause problems. Dans les bibliothèques, où l’interopérabilité des langages est requise, non-respect de cette règle peut nuire aux utilisateurs.In libraries, where language interoperability is required, failure to comply with this rule might adversely affect your users.

Exemple de ViolationExample of a Violation

DescriptionDescription

L’exemple suivant montre deux énumérations qui n’utilisent pas le type de données sous-jacent recommandé.The following example shows two enumerations that do not use the recommended underlying data type.

CodeCode

Imports System

Namespace Samples

	<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

End Namespace
using System;

namespace DesignLibrary
{
   [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
   }
}

Exemple de correctifExample of How to Fix

DescriptionDescription

L’exemple suivant résout la violation précédente en modifiant le type de données sous-jacent Int32.The following example fixes the previous violation by changing the underlying data type to Int32.

CodeCode

using System;

namespace Samples
{
    [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
    }
}
Imports System

Namespace Samples

	<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

End Namespace

CA1008 : Les énumérations doivent avoir la valeur zéroCA1008: Enums should have zero value

CA1027 : Marquez les énumérations avec FlagsAttributeCA1027: Mark enums with FlagsAttribute

CA2217 : Ne marquez pas les énumérations avec FlagsAttributeCA2217: Do not mark enums with FlagsAttribute

CA1700 : Ne nommez pas les valeurs d’énumération 'Reserved'CA1700: Do not name enum values 'Reserved'

CA1712 : Ne préfixez pas les valeurs d’énumération avec le nom du typeCA1712: Do not prefix enum values with type name

Voir aussiSee also