Share via


CA1700: Geef geen opsommingswaarden 'Gereserveerd' op

Eigenschappen Weergegeven als
Regel-id CA1700
Titel Noem geen opsommingswaarden 'Gereserveerd'
Categorie Naamgeving
Oplossing is brekend of niet-brekend Breken
Standaard ingeschakeld in .NET 8 Nee

Oorzaak

De naam van een opsommingslid bevat het woord 'gereserveerd'.

Beschrijving van regel

Bij deze regel wordt ervan uitgegaan dat een opsommingslid met een naam met gereserveerde naam momenteel niet wordt gebruikt, maar een tijdelijke aanduiding is die moet worden gewijzigd of verwijderd in een toekomstige versie. Het hernoemen of verwijderen van een lid is een belangrijke wijziging. U mag niet verwachten dat gebruikers een lid negeren, alleen omdat de naam 'gereserveerd' bevat en u niet kunt vertrouwen op gebruikers om documentatie te lezen of te volgen. Bovendien kunnen gereserveerde leden in objectbrowsers en slimme geïntegreerde ontwikkelomgevingen verwarring veroorzaken over welke leden daadwerkelijk worden gebruikt.

In plaats van een gereserveerd lid te gebruiken, voegt u een nieuw lid toe aan de opsomming in de toekomstige versie. In de meeste gevallen is de toevoeging van het nieuwe lid geen wijziging die fouten veroorzaakt, zolang de toevoeging niet de waarden van de oorspronkelijke leden veroorzaakt.

In een beperkt aantal gevallen is het toevoegen van een lid een belangrijke wijziging, zelfs wanneer de oorspronkelijke leden hun oorspronkelijke waarden behouden. In de eerste plaats kan het nieuwe lid niet worden geretourneerd vanuit bestaande codepaden zonder aanroepers die een switch instructie (Select in Visual Basic) gebruiken op de retourwaarde die de hele ledenlijst omvat en die een uitzondering genereren in het standaardscenario. Een secundair probleem is dat clientcode de wijziging in gedrag mogelijk niet afhandelt van reflectiemethoden zoals System.Enum.IsDefined. Als het nieuwe lid moet worden geretourneerd uit bestaande methoden of als een bekende toepassing incompatibiliteit optreedt vanwege slecht weerspiegelingsgebruik, is de enige onafgebroken oplossing:

  1. Voeg een nieuwe opsomming toe die de oorspronkelijke en nieuwe leden bevat.

  2. Markeer de oorspronkelijke opsomming met het System.ObsoleteAttribute kenmerk.

    Volg dezelfde procedure voor alle extern zichtbare typen of leden die de oorspronkelijke inventarisatie beschikbaar maken.

Schendingen oplossen

Als u een schending van deze regel wilt oplossen, verwijdert of wijzigt u de naam van het lid.

Wanneer waarschuwingen onderdrukken

Het is veilig om een waarschuwing van deze regel te onderdrukken voor een lid dat momenteel wordt gebruikt of voor bibliotheken die eerder zijn verzonden.

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 CA1700
// The code that's violating the rule is on this line.
#pragma warning restore CA1700

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.CA1700.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 (naamgeving) 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

CA2217: Opsommingen niet markeren met FlagsAttribute

CA1712: Geen voorvoegsel enumwaarden met typenaam

CA1028: Enum-opslag moet Int32 zijn

CA1008: Enums moet een nulwaarde hebben

CA1027: Opsommingen markeren met FlagsAttribute