C# Enum(Enumeration) med eksempel
โก Smart opsummering
Optรฆllinger i C# definerer et navngivet sรฆt af konstante integralvรฆrdier, sรฅsom ugedagene, hvilket gรธr kode nemmere at lรฆse og vedligeholde. Nรธgleordet enum deklarerer disse faste konstanter รฉn gang til genbrug pรฅ tvรฆrs af et program.

C# optรฆlling
En opregning bruges i ethvert programmeringssprog til at definere et konstant sรฆt vรฆrdier. For eksempel kan ugedagene defineres som en opregning og bruges hvor som helst i programmet. I C# defineres opregningen ved hjรฆlp af sรธgeordet 'enum'.
Lad os se et eksempel pรฅ, hvordan vi kan bruge sรธgeordet 'enum'.
I vores eksempel vil vi definere en opregning kaldet dage, som vil blive brugt til at gemme ugedagene. For hvert eksempel vil vi kun รฆndre hovedfunktionen i vores Program.cs-fil.
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:-
- 'Enum' datatype er specificeret til at erklรฆre en opregning. Navnet pรฅ opregningen er Dage. Alle ugens dage er angivet som vรฆrdier for opregningen.
- Endelig bruges console.write-funktionen til at vise en af โโvรฆrdierne i opregningen.
Hvis ovenstรฅende kode er indtastet korrekt, og programmet udfรธres korrekt, vil fรธlgende output blive vist.
Output:
Fra outputtet kan du se, at 'Sun'-vรฆrdien for opregningen vises i konsollen.
Hvorfor bruge enums i C#?
Enums gรธr et program nemmere at lรฆse, mere sikkert og enklere at vedligeholde. I stedet for at sprede uforklarlige tal, nogle gange kaldet magiske tal, ud over hele koden, giver en enumeration hver vรฆrdi et beskrivende navn, der angiver dens hensigt.
- Lรฆsbarhed: Et navn som Days.Fri er langt tydeligere end tallet 5, sรฅ alle, der lรฆser koden, forstรฅr betydningen med det samme.
- Type sikkerhed: En variabel, der er deklareret med en enum-type, kan kun indeholde รฉt af de definerede medlemmer, hvilket forhindrer ugyldige vรฆrdier i at glideping i.
- Vedligeholdelse: Relaterede konstanter findes pรฅ รฉt sted, sรฅ tilfรธjelse eller omdรธbning af en vรฆrdi opdaterer hele programmet konsekvent.
- Databinding: Frameworks som WPF og ASP.NET kan binde en enum til en rulleliste, hvilket gรธr enums nyttige til at bygge brugergrรฆnseflader.
Fordi compileren kontrollerer hver tildeling mod de tilladte medlemmer, hjรฆlper enums ogsรฅ med at opdage fejl tidligt, fรธr programmet kรธrer.
Tildeling af brugerdefinerede vรฆrdier til en C#-enum
Som standard tildeler C# det fรธrste enum-medlem vรฆrdien 0 og รธger hvert efterfรธlgende medlem med รฉn. I Days-optรฆllingen ovenfor er Sun lig med 0, Mon lig med 1, og Sat lig med 6. Du kan tilsidesรฆtte disse standardvรฆrdier ved at tildele eksplicitte tal.
- Eksplicitte vรฆrdier: Skrivning af enumniveau {Lav = 1, Mellem = 5, Hรธj = 10} sรฆtter hvert medlem til et valgt tal i stedet for standardsekvensen.
- Delvis opgave: Hvis du kun tildeler en vรฆrdi til nogle medlemmer, fortsรฆtter compileren med at nummerere fra den sidst tildelte vรฆrdi for de efterfรธlgende medlemmer.
- Underliggende type: En enum gemmer sine medlemmer som standard som int, men du kan basere den pรฅ byte, short eller long for at spare hukommelse eller udvide omrรฅdet.
Brugerdefinerede vรฆrdier er nyttige, nรฅr tallene skal matche et eksternt system, f.eks. databasekoder eller protokolkonstanter, sรฅ enum-vรฆrdien afspejler de faktiske data nรธjagtigt.
Sรฅdan konverterer du C# Enums til int, string og flag
C# har ofte brug for at flytte en enum-vรฆrdi til en anden form, f.eks. ved at gemme den som et tal eller lรฆse den tilbage fra tekst. Disse konverteringer sker pรฅ et par standardmรฅder.
- Optรฆlling til int: En eksplicit cast som (int)Days.Wed returnerer det underliggende heltal, hvilket er nyttigt til lagring eller aritmetik.
- int til optรฆlling: Hvis man caster i den anden retning, for eksempel (Days)3, omdannes et tal tilbage til det matchende enum-medlem.
- Streng at optรฆlle: Enum.Parse og den sikrere Enum.TryParse konverterer et navn som "Fri" til Days.Fri-medlemmet uden at tilfรธje ugyldig tekst.
- Optรฆlling til streng: Hvis et kald af ToString pรฅ et medlem returneres dets navn, sรฅ Days.Sun.ToString() producerer "Sun" til visning eller logfรธring.
- Medlemmer pรฅ listen: Enum.GetValues โโog Enum.GetNames returnerer alle vรฆrdier eller navne, hvilket er nyttigt, nรฅr menuer udfyldes eller input valideres.
Nรฅr en enum skal reprรฆsentere en kombination af valgmuligheder i stedet for รฉn, skal du anvende attributten Flags og give hvert medlem en potens af to, f.eks. 1, 2, 4 og 8. Du kan derefter kombinere medlemmer med den bitvise ELLER-operator og teste for en specifik mulighed med HasFlag-metoden.
Disse konverteringsteknikker gรธr det muligt for en enum at bevรฆge sig nemt mellem lรฆsbare navne, gemte tal og kombinerede flagsรฆt, keeping Resten af โโprogrammet er bรฅde skrivesikkert og let at fรธlge.


