C#-Aufzählung (Aufzählung) mit Beispiel

⚡ Intelligente Zusammenfassung

Aufzählungen in C# definieren benannte Mengen konstanter ganzzahliger Werte, wie beispielsweise die Wochentage, und erleichtern so die Lesbarkeit und Wartung des Codes. Das Schlüsselwort `enum` deklariert diese festen Konstanten einmalig zur Wiederverwendung im gesamten Programm.

  • 📐 Definition: Das Schlüsselwort enum gruppiert verwandte benannte Konstanten unter einem Typ und ersetzt so verstreute magische Zahlen durch lesbare Bezeichner.
  • Beispiel für Tage: Eine Aufzählung namens Days speichert die Wochentage, und Days.Sun gibt das ausgewählte Element anhand seines Namens zurück.
  • 🔢 Zugrundeliegende Werte: Enum-Elemente werden auf ganzzahlige Werte abgebildet, die bei Null beginnen und sich um eins erhöhen, sofern keine benutzerdefinierten Zahlen zugewiesen werden.
  • 🔁 Conversions: Explizite Typumwandlungen wandeln einen Enum in seinen Integer-Wert um, während Enum.Parse und Enum.TryParse Text wieder in seine Member umwandeln.
  • 🚩 Flaggen: Das Flags-Attribut ermöglicht es, mehrere Optionen eines Enums als Bitfelder mithilfe des bitweisen OR-Operators zu kombinieren.
  • 🤖 KI-Unterstützung: GitHub Copilot und ML.NET helfen dabei, Enum-Definitionen zu generieren und Enums auf Machine-Learning-Features abzubilden.

C# Enum(Aufzählung)

C#-Aufzählung

Eine Aufzählung wird in jeder Programmiersprache verwendet, um einen konstanten Satz von Werten zu definieren. Beispielsweise können die Wochentage als Aufzählung definiert und an einer beliebigen Stelle im Programm verwendet werden. In C# wird die Aufzählung mit Hilfe des Schlüsselworts „enum“ definiert.

Sehen wir uns ein Beispiel an, wie wir das Schlüsselwort „enum“ verwenden können.

In unserem Beispiel definieren wir eine Aufzählung namens Tage, die zum Speichern der Wochentage verwendet wird. Für jedes Beispiel ändern wir nur die Hauptfunktion in unserer Datei Program.cs.

C#-Aufzählung

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 Erläuterung:-

  1. Die „Aufzählung“ Datentyp wird angegeben, um eine Aufzählung zu deklarieren. Der Name der Aufzählung ist Days. Alle Wochentage werden als Werte der Enumeration angegeben.
  2. Abschließend wird die Funktion console.write verwendet, um einen der Werte der Aufzählung anzuzeigen.

Wenn der obige Code richtig eingegeben und das Programm erfolgreich ausgeführt wird, wird die folgende Ausgabe angezeigt.

Ausgang:

C#-Aufzählung

Anhand der Ausgabe können Sie erkennen, dass der „Sun“-Wert der Aufzählung in der Konsole angezeigt wird.

Warum sollte man Enums in C# verwenden?

Aufzählungen (Enumerationen) machen ein Programm lesbarer, sicherer und einfacher zu warten. Anstatt unerklärte Zahlen, sogenannte magische Zahlen, im gesamten Code zu verteilen, weist eine Aufzählung jedem Wert einen beschreibenden Namen zu, der seine Bedeutung verdeutlicht.

  • Ablesbarkeit: Ein Name wie Days.Fri ist viel aussagekräftiger als die Zahl 5, sodass jeder, der den Code liest, die Bedeutung sofort versteht.
  • Typensicherheit: Eine mit einem Enum-Typ deklarierte Variable kann nur eines der definierten Elemente enthalten, wodurch verhindert wird, dass ungültige Werte hineinrutschen.ping in.
  • Wartbarkeit: Zusammengehörige Konstanten befinden sich an einem zentralen Ort, sodass das Hinzufügen oder Umbenennen eines Wertes das gesamte Programm konsistent aktualisiert.
  • Datenbindung: Frameworks wie WPF und ASP.NET können eine Enumeration an eine Dropdown-Liste binden, wodurch Enumerationen für die Erstellung von Benutzeroberflächen nützlich werden.

Da der Compiler jede Zuweisung anhand der zulässigen Elemente überprüft, helfen Enums auch dabei, Fehler frühzeitig zu erkennen, bevor das Programm ausgeführt wird.

Zuweisen benutzerdefinierter Werte zu einer C#-Enumeration

Standardmäßig weist C# dem ersten Enumerationselement den Wert 0 zu und erhöht jedes nachfolgende Element um eins. In der obigen Tage-Enumeration entspricht Sun dem Wert 0, Mon dem Wert 1 und Sat dem Wert 6. Sie können diese Standardwerte überschreiben, indem Sie explizite Zahlen zuweisen.

  • Explizite Werte: Mit enum Level {Low = 1, Medium = 5, High = 10} wird jedem Element eine ausgewählte Zahl anstelle der Standardsequenz zugewiesen.
  • Teilzuweisung: Wenn Sie nur einigen Elementen einen Wert zuweisen, setzt der Compiler die Nummerierung der nachfolgenden Elemente ab dem zuletzt zugewiesenen Wert fort.
  • Zugrundeliegender Typ: Ein Enum speichert seine Elemente standardmäßig als int, aber Sie können es auf byte, short oder long basieren lassen, um Speicherplatz zu sparen oder den Wertebereich zu erweitern.

Benutzerdefinierte Werte sind hilfreich, wenn die Zahlen mit einem externen System übereinstimmen müssen, z. B. mit Datenbankcodes oder Protokollkonstanten, damit die Aufzählung die realen Daten exakt widerspiegelt.

Wie man C#-Enumerationen in int, string und Flags konvertiert

In C# ist es häufig erforderlich, einen Enum-Wert in eine andere Form zu konvertieren, beispielsweise um ihn als Zahl zu speichern oder aus einem Text wieder einzulesen. Diese Konvertierungen erfolgen auf verschiedene Standardarten.

  • Enum zu int: Eine explizite Typumwandlung wie (int)Days.Wed gibt die zugrunde liegende Ganzzahl zurück, was für die Speicherung oder Arithmetik nützlich ist.
  • int zu enum: Eine Typumwandlung in die andere Richtung, zum Beispiel (Days)3, wandelt eine Zahl wieder in das entsprechende Enum-Element um.
  • String zu Enum: Enum.Parse und das sicherere Enum.TryParse konvertieren einen Namen wie „Fri“ in das Days.Fri-Element, ohne bei ungültigem Text eine Ausnahme auszulösen.
  • Enum zu String: Der Aufruf von ToString für ein beliebiges Element gibt dessen Namen zurück, sodass Days.Sun.ToString() „Sun“ für die Anzeige oder Protokollierung erzeugt.
  • Mitgliederliste: Enum.GetValues ​​und Enum.GetNames geben jeden Wert bzw. Namen zurück, was beim Befüllen von Menüs oder bei der Validierung von Eingaben hilfreich ist.

Soll ein Enum eine Kombination von Auswahlmöglichkeiten anstatt nur einer darstellen, verwenden Sie das Attribut „Flags“ und weisen Sie jedem Element eine Zweierpotenz zu, z. B. 1, 2, 4 oder 8. Anschließend können Sie die Elemente mit dem bitweisen OR-Operator verknüpfen und mit der Methode „HasFlag“ auf eine bestimmte Option prüfen.

Diese Konvertierungstechniken ermöglichen es einem Enum, sauber zwischen lesbaren Namen, gespeicherten Zahlen und kombinierten Flag-Sets zu wechseln.ping Der Rest des Programms ist sowohl typsicher als auch leicht verständlich.

Häufig gestellte Fragen

Eine Enum-Variable hat standardmäßig den Wert 0, der demjenigen Element zugeordnet wird, das gleich 0 ist. Wenn kein Element 0 ist, enthält die Variable trotzdem 0. Daher definieren Entwickler oft zuerst ein Element vom Typ None oder Unknown, um Verwirrung zu vermeiden.

Eine Konstante definiert einen einzelnen benannten Wert, während ein Aufzählungstyp eine Gruppe zusammengehöriger benannter Konstanten unter einem einzigen Typ zusammenfasst. Aufzählungstypen erhöhen zudem die Typsicherheit, da eine Variable nur einen der definierten Werte des Aufzählungstyps aufnehmen kann.

Ja. Ein Enum kann innerhalb eines Namespace oder verschachtelt in einer Klasse oder Struktur deklariert werden, wodurch sein Gültigkeitsbereich auf diesen Typ beschränkt ist. C# erlaubt jedoch nicht, ein Enum innerhalb eines Methodenrumpfs zu deklarieren.

Ja. Zwei oder mehr Elemente können dieselbe zugrunde liegende Nummer haben, wodurch die späteren Namen zu Aliasen des ersten werden. Bei Vergleichen werden sie als gleich behandelt, und die Umwandlung dieses Werts in eine Zeichenkette gibt den zuerst im Enum definierten Namen zurück.

Ein Enum ist ein Werttyp und speichert seine Daten daher direkt und nicht als Referenz im Heap. Es erbt von System.Enum, verhält sich aber wie der zugrundeliegende Integraltyp, was das Kopieren und Vergleichen von Enum-Werten beschleunigt.

Ja. In ML.NET können Sie einen Enumerationswert einer Kategorie oder einem Label zuordnen, häufig durch Konvertierung in seinen Integer-Wert oder durch One-Hot-Codierung. Stark typisierte Enumerationen sorgen für übersichtliche und konsistente Eingabespalten in einer Machine-Learning-Pipeline.

Ja. GitHub Copilot schlägt vollständige Enum-Definitionen, benutzerdefinierte Werte, Flags-Attribute und Konvertierungshilfsfunktionen wie Enum.TryParse in Visual Studio vor. VS Code. RevPrüfen Sie jeden Vorschlag sorgfältig, da Copilot Werte oder Namen auswählen kann, die nicht zu Ihrer Domäne passen.

Verwenden Sie die Methode `Enum.IsDefined`, die `true` zurückgibt, wenn eine gegebene Zahl oder ein Name mit einem definierten Element übereinstimmt. In Kombination mit `Enum.TryParse` können Sie Benutzereingaben sicher validieren, bevor Sie Text in einen Enum-Wert umwandeln.

Fassen Sie diesen Beitrag mit folgenden Worten zusammen: