Dela via


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

Se även