C# Enum(Enumeration) med exempel

โšก Smart sammanfattning

Upprรคkningar i C# definierar en namngiven uppsรคttning konstanta integralvรคrden, sรฅsom veckodagarna, vilket gรถr koden lรคttare att lรคsa och underhรฅlla. Nyckelordet enum deklarerar dessa fasta konstanter en gรฅng fรถr รฅteranvรคndning i ett program.

  • ๐Ÿ“ Definition: Enum-nyckelordet grupperar relaterade namngivna konstanter under en typ och ersรคtter spridda magiska tal med lรคsbara identifierare.
  • ๏ธ Exempel pรฅ dagar: En upprรคkning som heter Days lagrar veckodagar, och Days.Sun returnerar den valda medlemmen med dess namn.
  • ๐Ÿ”ข Underliggande vรคrden: Enum-medlemmar mappas till heltal som bรถrjar pรฅ noll och รถkar med ett om inte anpassade tal tilldelas.
  • ๐Ÿ” Omvandlingar: Explicita omvandlingar omvandlar en enum till sitt heltal, medan Enum.Parse och Enum.TryParse konverterar text tillbaka till medlemmar.
  • ๐Ÿšฉ Flaggor: Attributet Flags lรฅter en enum kombinera flera alternativ som bitfรคlt med hjรคlp av den bitvisa OR-operatorn.
  • ๐Ÿค– AI-hjรคlp: GitHub Copilot och ML.NET hjรคlper till att generera enumdefinitioner och mappa enums till maskininlรคrningsfunktioner.

C# Upprรคkning (Enumeration)

C# upprรคkning

En upprรคkning anvรคnds i alla programmeringssprรฅk fรถr att definiera en konstant uppsรคttning vรคrden. Till exempel kan veckodagarna definieras som en upprรคkning och anvรคndas var som helst i programmet. I C# definieras upprรคkningen med hjรคlp av nyckelordet 'enum'.

Lรฅt oss se ett exempel pรฅ hur vi kan anvรคnda nyckelordet "enum".

I vรฅrt exempel kommer vi att definiera en upprรคkning som kallas dagar, som kommer att anvรคndas fรถr att lagra veckodagarna. Fรถr varje exempel kommer vi att modifiera bara huvudfunktionen i vรฅr Program.cs-fil.

C# upprรคkning

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 Fรถrklaring:-

  1. "upprรคkningen" data typ specificeras fรถr att deklarera en upprรคkning. Namnet pรฅ upprรคkningen รคr Dagar. Alla veckodagar anges som vรคrden fรถr upprรคkningen.
  2. Slutligen anvรคnds console.write-funktionen fรถr att visa ett av vรคrdena i upprรคkningen.

Om ovanstรฅende kod matas in korrekt och programmet kรถrs framgรฅngsrikt, kommer fรถljande utdata att visas.

Produktion:

C# upprรคkning

Frรฅn utgรฅngen kan du se att "Sun"-vรคrdet fรถr upprรคkningen visas i konsolen.

Varfรถr anvรคnda enumer i C#?

Enumerationer gรถr ett program lรคttare att lรคsa, sรคkrare och enklare att underhรฅlla. Istรคllet fรถr att sprida ofรถrklarade tal, ibland kallade magiska tal, i hela koden, ger en enumeration varje vรคrde ett beskrivande namn som anger dess avsikt.

  • Lรคsbarhet: Ett namn som Days.Fri รคr mycket tydligare รคn siffran 5, sรฅ alla som lรคser koden fรถrstรฅr betydelsen omedelbart.
  • Typ sรคkerhet: En variabel som deklareras med en enum-typ kan bara innehรฅlla en av de definierade medlemmarna, vilket fรถrhindrar att ogiltiga vรคrden fรถrsvinnerping i.
  • Underhรฅllbarhet: Relaterade konstanter finns pรฅ ett enda stรคlle, sรฅ att lรคgga till eller byta namn pรฅ ett vรคrde uppdaterar hela programmet konsekvent.
  • Databindning: Ramverk som WPF och ASP.NET kan binda en enum till en rullgardinslista, vilket gรถr enums anvรคndbara fรถr att bygga anvรคndargrรคnssnitt.

Eftersom kompilatorn kontrollerar varje tilldelning mot de tillรฅtna medlemmarna, hjรคlper enums ocksรฅ till att upptรคcka misstag tidigt, innan programmet kรถrs.

Tilldela anpassade vรคrden till en C#-enum

Som standard tilldelar C# den fรถrsta enum-medlemmen vรคrdet 0 och รถkar varje efterfรถljande medlem med ett. I Days-upprรคkningen ovan รคr Sun lika med 0, Mon lika med 1 och Sat lika med 6. Du kan รฅsidosรคtta dessa standardvรคrden genom att tilldela explicita siffror.

  • Explicita vรคrden: Att skriva enum Level {Low = 1, Medium = 5, High = 10} stรคller in varje medlem till ett valt nummer istรคllet fรถr standardsekvensen.
  • Deluppgift: Om du bara tilldelar ett vรคrde till vissa medlemmar, fortsรคtter kompilatorn att numrera frรฅn det senast tilldelade vรคrdet fรถr de medlemmar som fรถljer.
  • Underliggande typ: En enum lagrar sina medlemmar som int som standard, men du kan basera det pรฅ byte, short eller long fรถr att spara minne eller utรถka intervallet.

Anpassade vรคrden รคr anvรคndbara nรคr siffrorna mรฅste matcha ett externt system, till exempel databaskoder eller protokollkonstanter, sรฅ att enum speglar de verkliga uppgifterna exakt.

Hur man konverterar C# Enums till int, strรคng och flaggor

C# behรถver ofta flytta ett enumvรคrde till en annan form, till exempel genom att lagra det som ett tal eller lรคsa tillbaka det frรฅn text. Dessa konverteringar sker pรฅ nรฅgra standardsรคtt.

  • Upprรคkning till heltal: En explicit konverter som (int)Days.Wed returnerar det underliggande heltalet, vilket รคr anvรคndbart fรถr lagring eller aritmetik.
  • int till upprรคkning: Om man kastar i motsatt riktning, till exempel (Days)3, omvandlas ett tal tillbaka till matchande enum-medlem.
  • Strรคng att upprรคkna: Enum.Parse och den sรคkrare Enum.TryParse konverterar ett namn som "Fri" till Days.Fri-medlemmen utan att lรคgga till ogiltig text.
  • Upprรคkna till strรคng: Att anropa ToString pรฅ en medlem returnerar dess namn, sรฅ Days.Sun.ToString() producerar "Sun" fรถr visning eller loggning.
  • Medlemmar pรฅ listan: Enum.GetValues โ€‹โ€‹och Enum.GetNames returnerar varje vรคrde eller namn, vilket รคr anvรคndbart vid ifyllning av menyer eller validering av indata.

Nรคr en enum ska representera en kombination av alternativ snarare รคn ett, anvรคnd attributet Flags och ge varje medlem en potens av tvรฅ, till exempel 1, 2, 4 och 8. Du kan sedan kombinera medlemmar med den bitvisa ELLER-operatorn och testa fรถr ett specifikt alternativ med HasFlag-metoden.

Dessa konverteringstekniker lรฅter en enum rรถra sig snyggt mellan lรคsbara namn, lagrade nummer och kombinerade flagguppsรคttningar, keeping Resten av programmet รคr bรฅde skrivsรคkert och lรคtt att fรถlja.

Vanliga frรฅgor

En enum-variabel har som standard vรคrdet 0, dรคr vรคrdet mappas till den medlem som รคr lika med 0. Om ingen medlem รคr 0 har variabeln fortfarande 0, sรฅ utvecklare definierar ofta fรถrst en Ingen- eller Okรคnd-medlem fรถr att undvika fรถrvirring.

En konstant definierar ett namngivet vรคrde, medan en enum grupperar en relaterad uppsรคttning namngivna konstanter under en enda typ. Enums lรคgger ocksรฅ till typsรคkerhet, eftersom en variabel bara kan innehรฅlla en av upprรคkningens definierade medlemmar.

Ja. En enum kan deklareras inuti ett namnutrymme eller kapslas inuti en klass eller struktur, vilket begrรคnsar dess omfattning till den typen. C# tillรฅter dock inte att en enum deklareras inuti en metodkropp.

Ja. Tvรฅ eller fler medlemmar kan dela samma underliggande nummer, vilket gรถr de senare namnen till alias fรถr det fรถrsta. Jรคmfรถrelser behandlar dem som lika, och om man konverterar det vรคrdet till en strรคng returnerar man det namn som definierades fรถrst i enum.

En enum รคr en vรคrdetyp, sรฅ den lagrar sina data direkt snarare รคn som en referens pรฅ heapen. Den รคrver frรฅn System.Enum men beter sig som integraltypen under, vilket gรถr det snabbt att kopiera och jรคmfรถra enumvรคrden.

Ja. I ML.NET kan du mappa en enum till en kategorisk funktion eller etikett, ofta genom att konvertera den till dess heltal eller en engรฅngskodning. Starkt typade enum hรฅller inmatningskolumnerna i en maskininlรคrningspipeline tydliga och konsekventa.

Ja. GitHub Copilot fรถreslรฅr fullstรคndiga enum-definitioner, anpassade vรคrden, Flags-attribut och konverteringshjรคlpmedel som Enum.TryParse i Visual Studio och VS Code. RevVisa varje fรถrslag, eftersom Copilot kan vรคlja vรคrden eller namn som inte passar din domรคn.

Anvรคnd metoden Enum.IsDefined, som returnerar sant nรคr ett givet nummer eller namn matchar en definierad medlem. Genom att para den ihop med Enum.TryParse kan du validera anvรคndarinmatning pรฅ ett sรคkert sรคtt innan du konverterar text till ett enum-vรคrde.

Sammanfatta detta inlรคgg med: