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
Gerelateerde regels
- CA1008: Enums moet een nulwaarde hebben
- CA1027: Opsommingen markeren met FlagsAttribute
- CA2217: Opsommingen niet markeren met FlagsAttribute
- CA1700: Geef geen opsommingswaarden 'Gereserveerd' op
- CA1712: Geen voorvoegsel enumwaarden met typenaam