C# Enums (Enumerationen)


Was ist ein C# Enum?

Generell kann man sagen, dass eine Enumeration eine Aufzählung von Werten ist. Zum Beispiel kann ein Enum namens "Farbe" Werte wie blau, rot und gelb beinhalten. Eine typische Enumeration, mit welcher du vielleicht schon einmal gearbeitet hast, ist Boolean. Beim Boolean hat man die Aufzählungen true und false zur Auswahl.

Erklärung anhand eines Beispiels

Wir erstellen ein neues Konsolenanwendungsprogramm. Unter der Programm-Klasse legen wir nun eine neue Klasse "Todo" und eine Enumeration namens "Status" mit folgenden Werten an:

class Todo { public string Description { get; set; } public int EstimatedHours { get; set; } public Status Status { get; set; } } enum Status { NotStarted, InProgress, OnHold, Completed, Deleted }
text/x-csharp

Erstellen wir ein kleines Beispiel, an dem wir eine Liste von Todos in einer Schleife ausgeben und je nach Status die Textfarbe ändern. Dazu vergleichen wir in einem Switch die Enumerationen. 

Wir beginnen mit der Todo Liste mit Probewerten und rufen eine Methode für die Ausgabe von Todos auf.

static void Main(string[] args) { List<Todo> todos = new List<Todo>() { new Todo { Description = "Task 1", EstimatedHours = 6, Status = Status.Completed }, new Todo { Description = "Task 2", EstimatedHours = 2, Status = Status.InProgress }, new Todo { Description = "Task 3", EstimatedHours = 8, Status = Status.NotStarted }, new Todo { Description = "Task 4", EstimatedHours = 12, Status = Status.Deleted }, new Todo { Description = "Task 5", EstimatedHours = 6, Status = Status.InProgress }, new Todo { Description = "Task 6", EstimatedHours = 2, Status = Status.NotStarted }, new Todo { Description = "Task 7", EstimatedHours = 14, Status = Status.NotStarted }, new Todo { Description = "Task 8", EstimatedHours = 8, Status = Status.Completed }, new Todo { Description = "Task 9", EstimatedHours = 8, Status = Status.InProgress }, new Todo { Description = "Task 10", EstimatedHours = 8, Status = Status.Completed }, new Todo { Description = "Task 11", EstimatedHours = 4, Status = Status.NotStarted }, new Todo { Description = "Task 12", EstimatedHours = 10, Status = Status.Completed }, new Todo { Description = "Task 13", EstimatedHours = 12, Status = Status.Deleted }, new Todo { Description = "Task 14", EstimatedHours = 6, Status = Status.Completed } }; PrintAssessment(todos); Console.ReadLine(); }
text/x-csharp

Erstellen wir eine Methode zur Konsolenausgabe der Todos:

Im Case vom Switch steht jetzt kein String oder Int, sondern unser Enumerationstyp.

private static void PrintAssessment(List<Todo> todos) { foreach (var todo in todos) { switch (todo.Status) { case Status.NotStarted: Console.ForegroundColor = ConsoleColor.Red; break; case Status.InProgress: Console.ForegroundColor = ConsoleColor.Green; break; case Status.OnHold: Console.ForegroundColor = ConsoleColor.DarkRed; break; case Status.Completed: Console.ForegroundColor = ConsoleColor.Blue; break; case Status.Deleted: Console.ForegroundColor = ConsoleColor.Yellow; break; default: break; } Console.WriteLine(todo.Description); } }
text/x-csharp

Das hier verwendete foreach ist eine Schleife, in der die Todos Liste durchlaufen wird. Der Schleifenrumpf, also das Switch Statement, wird für jedes todo in todos aufgerufen. 

Hinweis

Eine Variable von einer Enumeration Farbe erkennt nur Aufzählungen von Farben und nicht aus anderen Enumerationen wie z.B. Obst.

Vollständiger Sourcecode

class Program { static void Main(string[] args) { List<Todo> todos = new List<Todo>() { new Todo { Description = "Task 1", EstimatedHours = 6, Status = Status.Completed }, new Todo { Description = "Task 2", EstimatedHours = 2, Status = Status.InProgress }, new Todo { Description = "Task 3", EstimatedHours = 8, Status = Status.NotStarted }, new Todo { Description = "Task 4", EstimatedHours = 12, Status = Status.Deleted }, new Todo { Description = "Task 5", EstimatedHours = 6, Status = Status.InProgress }, new Todo { Description = "Task 6", EstimatedHours = 2, Status = Status.NotStarted }, new Todo { Description = "Task 7", EstimatedHours = 14, Status = Status.NotStarted }, new Todo { Description = "Task 8", EstimatedHours = 8, Status = Status.Completed }, new Todo { Description = "Task 9", EstimatedHours = 8, Status = Status.InProgress }, new Todo { Description = "Task 10", EstimatedHours = 8, Status = Status.Completed }, new Todo { Description = "Task 11", EstimatedHours = 4, Status = Status.NotStarted }, new Todo { Description = "Task 12", EstimatedHours = 10, Status = Status.Completed }, new Todo { Description = "Task 13", EstimatedHours = 12, Status = Status.Deleted }, new Todo { Description = "Task 14", EstimatedHours = 6, Status = Status.Completed } }; Console.ForegroundColor = ConsoleColor.DarkRed; PrintAssessment(todos); Console.ReadLine(); } private static void PrintAssessment(List<Todo> todos) { foreach (var todo in todos) { switch (todo.Status) { case Status.NotStarted: Console.ForegroundColor = ConsoleColor.Red; break; case Status.InProgress: Console.ForegroundColor = ConsoleColor.Green; break; case Status.OnHold: Console.ForegroundColor = ConsoleColor.DarkRed; break; case Status.Completed: Console.ForegroundColor = ConsoleColor.Blue; break; case Status.Deleted: Console.ForegroundColor = ConsoleColor.Yellow; break; default: break; } Console.WriteLine(todo.Description); } } } class Todo { public string Description { get; set; } public int EstimatedHours { get; set; } public Status Status { get; set; } } enum Status { NotStarted, InProgress, OnHold, Completed, Deleted }
text/x-csharp

Über Digital Dojo

Das Digital Dojo ist der virtuelle Übungsraum von COUNT IT.

Angehende Programmierer*innen, Code-Neulinge, Wiedereinsteiger*innen und Fortgeschrittene finden hier das nötige Rüstzeug für ihre Karriere.

Du möchtest deine Lehre bei COUNT IT starten? Dann bist du hier richtig - besiege deine Gegner im Dojo Game und sichere dir deine Lehrstelle!

Inspire your career.

Newsletter abonnieren

Der COUNT IT Newsletter liefert viermal jährlich interessante Neuigkeiten über das Unternehmen. Gleich anfordern!