Delen via


CA1028: Enum-opslag moet Int32 zijn

Eigenschappen Weergegeven als
Regel-id CA1028
Titel Enum-opslag moet Int32 zijn
Categorie Ontwerpen
Oplossing is brekend of niet-brekend Breken
Standaard ingeschakeld in .NET 9 Nee

Oorzaak

Het onderliggende type opsomming is niet System.Int32.

Deze regel kijkt standaard alleen naar extern zichtbare opsommingen, maar dit is configureerbaar.

Beschrijving van regel

Een opsomming is een waardetype dat een set gerelateerde benoemde constanten definieert. Standaard wordt het System.Int32 gegevenstype gebruikt om de constante waarde op te slaan. Hoewel u dit onderliggende type kunt wijzigen, is het niet nodig of aanbevolen voor de meeste scenario's. Er wordt geen significante prestatiewinst bereikt met behulp van een gegevenstype dat kleiner is dan Int32. Als u het standaardgegevenstype niet kunt gebruiken, moet u een van de cls-compatibele integrale typen (Common Language System) gebruiken, ByteInt16Int32of Int64 ervoor zorgen dat alle waarden van de opsomming kunnen worden weergegeven in cls-compatibele programmeertalen.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, tenzij er grootte- of compatibiliteitsproblemen bestaan, gebruikt u Int32. Gebruik voor situaties waarin Int32 de waarden niet groot genoeg zijn om de waarden Int64op te slaan. Als compatibiliteit met eerdere versies een kleiner gegevenstype vereist, gebruikt Byte of Int16.

Wanneer waarschuwingen onderdrukken

Onderdrukt een waarschuwing van deze regel alleen als compatibiliteitsproblemen met eerdere versies dit vereisen. In toepassingen veroorzaakt het niet naleven van deze regel meestal geen problemen. In bibliotheken, waarbij taalinteroperabiliteit vereist is, kan het niet voldoen aan deze regel uw gebruikers nadelig beïnvloeden.

Een waarschuwing onderdrukken

Als u slechts één schending wilt onderdrukken, voegt u preprocessorrichtlijnen toe aan uw bronbestand om de regel uit te schakelen en vervolgens opnieuw in te schakelen.

#pragma warning disable CA1028
// The code that's violating the rule is on this line.
#pragma warning restore CA1028

Als u de regel voor een bestand, map of project wilt uitschakelen, stelt u de ernst none ervan in op het configuratiebestand.

[*.{cs,vb}]
dotnet_diagnostic.CA1028.severity = none

Zie Codeanalysewaarschuwingen onderdrukken voor meer informatie.

Code configureren om te analyseren

Gebruik de volgende optie om te configureren op welke onderdelen van uw codebase deze regel moet worden uitgevoerd.

U kunt deze optie configureren voor alleen deze regel, voor alle regels waarop deze van toepassing is, of voor alle regels in deze categorie (ontwerp) waarop deze van toepassing is. Zie de configuratieopties voor de codekwaliteitsregel voor meer informatie.

Specifieke API-oppervlakken opnemen

U kunt instellen op welke onderdelen van uw codebase deze regel moet worden uitgevoerd, op basis van hun toegankelijkheid. Als u bijvoorbeeld wilt opgeven dat de regel alleen moet worden uitgevoerd op het niet-openbare API-oppervlak, voegt u het volgende sleutel-waardepaar toe aan een .editorconfig-bestand in uw project:

dotnet_code_quality.CAXXXX.api_surface = private, internal

Opmerking

In het volgende voorbeeld ziet u twee opsommingen die niet gebruikmaken van het aanbevolen onderliggende gegevenstype.

[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

In het volgende voorbeeld wordt de vorige schending opgelost door het onderliggende gegevenstype te wijzigen in 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

Zie ook