CA1028: Uppräkningslagring ska vara Int32
Property | Värde |
---|---|
Regel-ID | CA1028 |
Title | Uppräkningslagring ska vara Int32 |
Kategori | Designa |
Korrigeringen är icke-bakåtkompatibel | Brott |
Aktiverad som standard i .NET 9 | Nej |
Orsak
Den underliggande typen av en uppräkning är inte System.Int32.
Som standard tittar den här regeln bara på externt synliga uppräkningar, men det kan konfigureras.
Regelbeskrivning
En uppräkning är en värdetyp som definierar en uppsättning relaterade namngivna konstanter. Som standard System.Int32 används datatypen för att lagra det konstanta värdet. Även om du kan ändra den här underliggande typen är det inte nödvändigt eller rekommenderas för de flesta scenarier. Ingen betydande prestandaökning uppnås med hjälp av en datatyp som är mindre än Int32. Om du inte kan använda standarddatatypen bör du använda någon av de CLS-kompatibla integraltyperna Byte(Common Language System), , Int16, Int32eller Int64 för att se till att alla värden i uppräkningen kan representeras i CLS-kompatibla programmeringsspråk.
Så här åtgärdar du överträdelser
Om du vill åtgärda ett brott mot den här regeln använder du Int32om det inte finns problem med storlek eller kompatibilitet. Om du Int32 inte är tillräckligt stor för att lagra värdena använder du Int64. Om bakåtkompatibilitet kräver en mindre datatyp använder du Byte eller Int16.
När du ska ignorera varningar
Ignorera endast en varning från den här regeln om problem med bakåtkompatibilitet kräver det. I program orsakar underlåtenhet att följa den här regeln vanligtvis inga problem. I bibliotek, där språksamverkans krävs, kan underlåtenhet att följa den här regeln påverka användarna negativt.
Ignorera en varning
Om du bara vill förhindra en enda överträdelse lägger du till förprocessordirektiv i källfilen för att inaktivera och aktiverar sedan regeln igen.
#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028
Om du vill inaktivera regeln för en fil, mapp eller ett projekt anger du dess allvarlighetsgrad till none
i konfigurationsfilen.
[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none
Mer information finns i Så här utelämnar du kodanalysvarningar.
Konfigurera kod för analys
Använd följande alternativ för att konfigurera vilka delar av kodbasen som regeln ska köras på.
Du kan konfigurera det här alternativet för bara den här regeln, för alla regler som gäller för eller för alla regler i den här kategorin (design) som den gäller för. Mer information finns i Konfigurationsalternativ för kodkvalitetsregel.
Inkludera specifika API-ytor
Du kan konfigurera vilka delar av kodbasen som ska köras med den här regeln baserat på deras tillgänglighet. Om du till exempel vill ange att regeln endast ska köras mot den icke-offentliga API-ytan lägger du till följande nyckel/värde-par i en .editorconfig-fil i projektet:
dotnet_code_quality.CAXXXX.api_surface = private, internal
Exempel
I följande exempel visas två uppräkningar som inte använder den rekommenderade underliggande datatypen.
[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
I följande exempel åtgärdas den tidigare överträdelsen genom att den underliggande datatypen ändras till 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
Relaterade regler
- CA1008: Uppräkningar bör ha noll värde
- CA1027: Markera uppräkningar med FlagsAttribute
- CA2217: Markera inte uppräkningar med FlagsAttribute
- CA1700: Namnge inte uppräkningsvärdena "Reserverade"
- CA1712: Ange inte prefixvärden med typnamn