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: