C# Enum(Opsomming) met voorbeeld

โšก Slimme samenvatting

In C# definiรซren enumeraties een benoemde set van constante gehele getallen, zoals de dagen van de week, waardoor de code gemakkelijker te lezen en te onderhouden is. Het sleutelwoord `enum` declareert deze vaste constanten eenmalig, zodat ze in het hele programma hergebruikt kunnen worden.

  • ๐Ÿ“ Definitie: Het trefwoord `enum` groepeert verwante benoemde constanten onder รฉรฉn type, waarbij verspreide magische getallen worden vervangen door leesbare identificatoren.
  • ๐Ÿ—“๏ธ Voorbeeld van dagen: Een opsomming genaamd Days slaat de weekdagen op, en Days.Sun retourneert het geselecteerde lid aan de hand van de naam.
  • ๐Ÿ”ข Onderliggende waarden: Enum-leden worden gekoppeld aan gehele getallen die beginnen bij nul en met รฉรฉn toenemen, tenzij er aangepaste getallen worden toegewezen.
  • ๐Ÿ” conversies: Expliciete casts zetten een enum om in het bijbehorende integer, terwijl Enum.Parse en Enum.TryParse tekst weer omzetten in leden.
  • ๐Ÿšฉ vlaggen: Het attribuut Flags maakt het mogelijk om met รฉรฉn enum meerdere opties als bitvelden te combineren met behulp van de bitwise OR-operator.
  • ๐Ÿค– AI-assistentie: GitHub Copilot en ML.NET helpen bij het genereren van enum-definities en het koppelen van enums aan machine learning-functies.

C# Enum(Opsomming)

C#-opsomming

Een opsomming wordt in elke programmeertaal gebruikt om een โ€‹โ€‹constante reeks waarden te definiรซren. De dagen van de week kunnen bijvoorbeeld worden gedefinieerd als een opsomming en overal in het programma worden gebruikt. In C# wordt de opsomming gedefinieerd met behulp van het trefwoord 'enum'.

Laten we een voorbeeld bekijken van hoe we het trefwoord 'enum' kunnen gebruiken.

In ons voorbeeld definiรซren we een opsomming genaamd dagen, die zal worden gebruikt om de dagen van de week op te slaan. Voor elk voorbeeld zullen we alleen de hoofdfunctie in ons Program.cs-bestand wijzigen.

C#-opsomming

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace DemoApplication
{
 class Program 
 {
  enum Days{Sun,Mon,tue,Wed,thu,Fri,Sat};
  
  static void Main(string[] args) 
  {
   Console.Write(Days.Sun);
   
   Console.ReadKey();
  }
 }
}

Code Uitleg:-

  1. De 'enum' data type is gespecificeerd om een โ€‹โ€‹opsomming te declareren. De naam van de opsomming is Dagen. Alle dagen van de week worden opgegeven als waarden van de opsomming.
  2. Ten slotte wordt de functie console.write gebruikt om een โ€‹โ€‹van de waarden van de opsomming weer te geven.

Als de bovenstaande code correct is ingevoerd en het programma succesvol is uitgevoerd, wordt de volgende uitvoer weergegeven.

Output:

C#-opsomming

Uit de uitvoer kunt u zien dat de 'Zon'-waarde van de opsomming in de console wordt weergegeven.

Waarom enums gebruiken in C#?

Enumeraties maken een programma leesbaarder, veiliger en eenvoudiger te onderhouden. In plaats van onverklaarde getallen, ook wel 'magische getallen' genoemd, door de code te verspreiden, geeft een enumeratie elke waarde een beschrijvende naam die het doel ervan aangeeft.

  • Leesbaarheid: Een naam als Days.Fri is veel duidelijker dan het getal 5, dus iedereen die de code leest, begrijpt de betekenis meteen.
  • Type veiligheid: Een variabele die is gedeclareerd met een enum-type kan slechts รฉรฉn van de gedefinieerde leden bevatten, waardoor ongeldige waarden worden voorkomen.ping inch
  • Onderhoudbaarheid: Gerelateerde constanten bevinden zich op รฉรฉn plek, waardoor het toevoegen of hernoemen van een waarde het hele programma consistent bijwerkt.
  • Dataverbinding: Frameworks zoals WPF en ASP.NET kunnen een enum koppelen aan een dropdownlijst, waardoor enums nuttig zijn voor het bouwen van gebruikersinterfaces.

Omdat de compiler elke toewijzing controleert aan de hand van de toegestane leden, helpen enumeraties ook om fouten vroegtijdig op te sporen, voordat het programma wordt uitgevoerd.

Aangepaste waarden toewijzen aan een C#-enum

Standaard kent C# aan het eerste lid van een enum de waarde 0 toe en verhoogt elk volgend lid met รฉรฉn. In de bovenstaande enumeratie 'Days' is 'Sun' gelijk aan 0, 'Mon' gelijk aan 1 en 'Sat' gelijk aan 6. U kunt deze standaardwaarden overschrijven door expliciete getallen toe te kennen.

  • Expliciete waarden: Door enum Level {Low = 1, Medium = 5, High = 10} te schrijven, wordt voor elk lid een gekozen nummer ingesteld in plaats van de standaardreeks.
  • Gedeeltelijke opdracht: Als je aan slechts enkele leden een waarde toewijst, blijft de compiler de nummering voor de volgende leden voortzetten vanaf de laatst toegewezen waarde.
  • Onderliggend type: Een enum slaat zijn leden standaard op als integer, maar je kunt hem baseren op byte, short of long om geheugen te besparen of het bereik uit te breiden.

Aangepaste waarden zijn handig wanneer de getallen moeten overeenkomen met een extern systeem, zoals databasecodes of protocolconstanten, zodat de enum de werkelijke gegevens exact weerspiegelt.

Hoe converteer je C#-enums naar integers, strings en flags?

In C# is het vaak nodig om een โ€‹โ€‹enum-waarde om te zetten naar een andere vorm, bijvoorbeeld door deze op te slaan als een getal of door de waarde terug te lezen uit tekst. Deze conversies vinden op een aantal standaardmanieren plaats.

  • Enum naar int: Een expliciete typeconversie zoals (int)Days.Wed retourneert het onderliggende integergetal, wat handig is voor opslag of rekenkundige bewerkingen.
  • integer naar enum: Bij het omzetten in de andere richting, bijvoorbeeld (Days)3, wordt een getal weer omgezet in het overeenkomstige enum-lid.
  • String naar enum: Enum.Parse en de veiligere Enum.TryParse zetten een naam zoals "Fri" om in het lid Days.Fri zonder een foutmelding te geven bij ongeldige tekst.
  • Enum naar tekenreeks: Als je ToString aanroept op een willekeurig lid, krijg je de naam ervan terug. Dus Days.Sun.ToString() geeft "Sun" als resultaat voor weergave of logboekregistratie.
  • Lijst met leden: Enum.GetValues โ€‹โ€‹en Enum.GetNames retourneren elke waarde of naam, wat handig is bij het vullen van menu's of het valideren van invoer.

Wanneer een enum een โ€‹โ€‹combinatie van keuzes moet weergeven in plaats van รฉรฉn enkele keuze, pas dan het Flags-attribuut toe en geef elk lid een macht van twee, zoals 1, 2, 4 en 8. Je kunt de leden vervolgens combineren met de bitwise OR-operator en met de HasFlag-methode controleren of een specifieke optie aanwezig is.

Deze conversietechnieken zorgen ervoor dat een enum probleemloos kan worden omgezet tussen leesbare namen, opgeslagen getallen en gecombineerde vlaggensets.ping De rest van het programma is zowel typeveilig als gemakkelijk te volgen.

Veelgestelde vragen

Een enum-variabele heeft standaard de waarde 0, de waarde die wordt toegewezen aan het lid dat gelijk is aan 0. Als geen enkel lid 0 is, bevat de variabele nog steeds 0. Daarom definiรซren ontwikkelaars vaak eerst een lid met de waarde None of Unknown om verwarring te voorkomen.

Een `const` definieert รฉรฉn benoemde waarde, terwijl een `enum` een gerelateerde set benoemde constanten onder รฉรฉn type groepeert. Enums bieden ook typeveiligheid, omdat een variabele slechts รฉรฉn van de gedefinieerde leden van de enumeratie kan bevatten.

Ja. Een enum kan binnen een namespace worden gedeclareerd of genest in een klasse of struct, waardoor het bereik ervan beperkt blijft tot dat type. C# staat echter niet toe dat een enum binnen de body van een methode wordt gedeclareerd.

Ja. Twee of meer leden kunnen hetzelfde onderliggende nummer delen, waardoor de latere namen aliassen zijn van de eerste. Bij vergelijkingen worden ze als gelijk beschouwd en het omzetten van die waarde naar een tekenreeks retourneert de naam die als eerste in de enum is gedefinieerd.

Een enum is een waardetype, dus de gegevens worden direct opgeslagen in plaats van als een verwijzing op de heap. Het erft van System.Enum, maar gedraagt โ€‹โ€‹zich als het onderliggende integrale type, waardoor het kopiรซren en vergelijken van enum-waarden snel gaat.

Ja. In ML.NET kun je een enum koppelen aan een categorische eigenschap of label, vaak door deze om te zetten naar de integerwaarde of een one-hot-codering. Sterk getypeerde enums zorgen ervoor dat de invoerkolommen van een machine learning-pipeline overzichtelijk en consistent blijven.

Ja. GitHub Copilot suggereert volledige enum-definities, aangepaste waarden, Flags-attributen en conversiehulpmiddelen zoals Enum.TryParse in Visual Studio. VS Code. RevBekijk elke suggestie zorgvuldig, aangezien Copilot waarden of namen kan kiezen die niet bij uw domein passen.

Gebruik de methode Enum.IsDefined, die true retourneert wanneer een gegeven getal of naam overeenkomt met een gedefinieerd lid. In combinatie met Enum.TryParse kunt u gebruikersinvoer veilig valideren voordat u tekst omzet in een enum-waarde.

Vat dit bericht samen met: