C# Enum(Enumeration) med eksempel

⚡ Smart oppsummering

Opplistinger i C# definerer et navngitt sett med konstante integralverdier, for eksempel ukedagene, noe som gjør koden enklere å lese og vedlikeholde. Nøkkelordet enum deklarerer disse faste konstantene én gang for gjenbruk på tvers av et program.

  • 📐 Definisjon: Enum-nøkkelordet grupperer relaterte navngitte konstanter under én type, og erstatter spredte magiske tall med lesbare identifikatorer.
  • Eksempel på dager: En opplisting kalt Days lagrer ukedagene, og Days.Sun returnerer det valgte medlemmet med navnet sitt.
  • 🔢 Underliggende verdier: Enum-medlemmer tilordnes til heltallsverdier som begynner på null og øker med én, med mindre egendefinerte tall er tilordnet.
  • 🔁 Konverteringer: Eksplisitte konverteringer gjør en enum til sitt heltall, mens Enum.Parse og Enum.TryParse konverterer tekst tilbake til medlemmer.
  • 🚩 Flagg: Flags-attributtet lar én enum kombinere flere alternativer som bitfelt ved hjelp av den bitvise OR-operatoren.
  • 🤖 AI-hjelp: GitHub Copilot og ML.NET hjelper med å generere enum-definisjoner og tilordne enums til maskinlæringsfunksjoner.

C# Enum (Opplisting)

C#-oppregning

En oppregning brukes i et hvilket som helst programmeringsspråk for å definere et konstant sett med verdier. For eksempel kan ukedagene defineres som en oppregning og brukes hvor som helst i programmet. I C# er oppregningen definert ved hjelp av søkeordet 'enum'.

La oss se et eksempel på hvordan vi kan bruke søkeordet 'enum'.

I vårt eksempel vil vi definere en opptelling kalt dager, som vil bli brukt til å lagre ukedagene. For hvert eksempel vil vi bare endre hovedfunksjonen i filen Program.cs.

C#-oppregning

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 Forklaring:-

  1. "enum" data-type er spesifisert for å erklære en oppregning. Navnet på oppregningen er Dager. Alle ukedagene er spesifisert som verdier for opptellingen.
  2. Til slutt brukes console.write-funksjonen til å vise en av verdiene i oppregningen.

Hvis koden ovenfor er angitt riktig og programmet kjøres vellykket, vil følgende utdata vises.

Utgang:

C#-oppregning

Fra utgangen kan du se at 'Sol'-verdien for oppregningen vises i konsollen.

Hvorfor bruke enums i C#?

Enumerasjoner gjør et program enklere å lese, tryggere og enklere å vedlikeholde. I stedet for å spre uforklarlige tall, noen ganger kalt magiske tall, utover i koden, gir en enumerasjon hver verdi et beskrivende navn som angir dens hensikt.

  • lesbarhet: Et navn som Days.Fri er mye tydeligere enn tallet 5, så alle som leser koden forstår betydningen umiddelbart.
  • Type sikkerhet: En variabel deklarert med en enum-type kan bare inneholde ett av de definerte medlemmene, noe som forhindrer at ugyldige verdier forsvinnerping i.
  • Vedlikehold: Relaterte konstanter finnes på ett sted, så det å legge til eller gi nytt navn til en verdi oppdaterer hele programmet konsekvent.
  • Databinding: Rammeverk som WPF og ASP.NET kan binde en enum til en rullegardinliste, noe som gjør enums nyttige for å bygge brukergrensesnitt.

Fordi kompilatoren sjekker hver tildeling mot de tillatte medlemmene, hjelper enums også med å fange opp feil tidlig, før programmet kjører.

Tilordne egendefinerte verdier til en C#-enum

Som standard tildeler C# det første enum-medlemmet verdien 0 og øker hvert påfølgende medlem med én. I Days-opplistingen ovenfor er Sun lik 0, Mon lik 1 og Sat lik 6. Du kan overstyre disse standardverdiene ved å tildele eksplisitte tall.

  • Eksplisitte verdier: Skriving av enumnivå {Lav = 1, Medium = 5, Høy = 10} setter hvert medlem til et valgt tall i stedet for standardsekvensen.
  • Delvis oppgave: Hvis du tilordner en verdi til bare noen medlemmer, fortsetter kompilatoren å nummerere fra den sist tildelte verdien for medlemmene som følger.
  • Underliggende type: En enum lagrer medlemmene sine som int som standard, men du kan basere den på byte, short eller long for å spare minne eller utvide rekkevidden.

Tilpassede verdier er nyttige når tallene må samsvare med et eksternt system, for eksempel databasekoder eller protokollkonstanter, slik at enumeringen speiler de faktiske dataene nøyaktig.

Slik konverterer du C# Enums til int, string og Flags

C# trenger ofte å flytte en enum-verdi til en annen form, for eksempel å lagre den som et tall eller lese den tilbake fra tekst. Disse konverteringene skjer på noen få standardmåter.

  • Enum til int: En eksplisitt konvertering som (int)Days.Wed returnerer det underliggende heltallet, som er nyttig for lagring eller aritmetikk.
  • int til oppsummering: Hvis man bruker en variabel i motsatt retning, for eksempel (Days)3, blir et tall gjort om til det samsvarende enum-medlemmet.
  • Streng som skal oppsummeres: Enum.Parse og den tryggere Enum.TryParse konverterer et navn som «Fri» til Days.Fri-medlemmet uten å kaste på ugyldig tekst.
  • Enumer til streng: Å kalle ToString på et hvilket som helst medlem returnerer navnet, slik at Days.Sun.ToString() produserer «Sun» for visning eller logging.
  • Medlemmer på listen: Enum.GetValues ​​og Enum.GetNames returnerer alle verdier eller navn, noe som er nyttig når man fyller ut menyer eller validerer inndata.

Når en enum skal representere en kombinasjon av valg i stedet for ett, bruk Flags-attributtet og gi hvert medlem en potens av to, for eksempel 1, 2, 4 og 8. Du kan deretter kombinere medlemmer med den bitvise ELLER-operatoren og teste for et bestemt alternativ med HasFlag-metoden.

Disse konverteringsteknikkene lar en enum bevege seg rent mellom lesbare navn, lagrede tall og kombinerte flaggsett, keeping Resten av programmet er både skrivesikkert og lett å følge.

Spørsmål og svar

En enum-variabel har som standard 0, og verdien er tilordnet det medlemmet som er lik 0. Hvis ingen medlemmer er 0, har variabelen fortsatt 0, så utviklere definerer ofte et Ingen- eller Ukjent-medlem først for å unngå forvirring.

En const definerer én navngitt verdi, mens en enum grupperer et relatert sett med navngitte konstanter under én enkelt type. Enums legger også til typesikkerhet, fordi en variabel bare kan inneholde ett av opplistingens definerte medlemmer.

Ja. En enum kan deklareres i et navnerom eller nestes i en klasse eller struktur, noe som begrenser omfanget til den typen. C# tillater imidlertid ikke at en enum deklareres i en metodekropp.

Ja. To eller flere medlemmer kan dele samme underliggende nummer, noe som gjør de senere navnene til aliaser av det første. Sammenligninger behandler dem som likeverdige, og konvertering av den verdien til en streng returnerer navnet som er definert først i enumeringen.

En enum er en verditype, så den lagrer dataene sine direkte i stedet for som en referanse på heapen. Den arver fra System.Enum, men oppfører seg som integraltypen under, noe som gjør kopiering og sammenligning av enum-verdier rask.

Ja. I ML.NET kan du tilordne en enum til en kategorisk funksjon eller etikett, ofte ved å konvertere den til heltallsverdien eller en engangskoding. Sterkt typede enum holder inputkolonnene i en maskinlæringspipeline klare og konsistente.

Ja. GitHub Copilot foreslår komplette enum-definisjoner, tilpassede verdier, Flags-attributter og konverteringshjelpere som Enum.TryParse i Visual Studio og VS Code. RevSe hvert forslag, siden Copilot kan velge verdier eller navn som ikke passer til domenet ditt.

Bruk Enum.IsDefined-metoden, som returnerer sann når et gitt tall eller navn samsvarer med et definert medlem. Ved å koble den med Enum.TryParse kan du validere brukerinndata på en sikker måte før du konverterer tekst til en enum-verdi.

Oppsummer dette innlegget med: