Aufzählungstypen im Visier (Teil 3)
Kommentare

Mit Aufzählungstypen arbeiten
Normalerweise verwenden Sie Werte der Enumeration als Konstanten anstelle des zugrunde liegenden Werts. Zum Beispiel könnten Sie den Status eines Spiels mit dem Code
if(match.Status

Mit Aufzählungstypen arbeiten

Normalerweise verwenden Sie Werte der Enumeration als Konstanten anstelle des zugrunde liegenden Werts. Zum Beispiel könnten Sie den Status eines Spiels mit dem Code

if(match.Status == MatchStatus.Completed) {     : } 

überprüfen. Dieser Code ist verständlich und aussagekräftig. Nimmt man den Wert von MatchStatus.Completed mit 1 an, ist der folgende Code vollständig zum vorherigen Codefragment äquivalent:

if(match.Status == 1) {     : } 

Der Unterschied liegt im Typ, den Sie der Eigenschaft Status der Klasse Match zuweisen. Um die erste Codeversion erfolgreich verwenden zu können, muss die Eigenschaft Status vom Typ MatchStatus deklariert sein. In der zweiten Version kann sie dagegen eine einfache Ganzzahl sein. Solange die Eigenschaft Status eine Ganzzahl ist, können Sie jeden beliebigen ganzzahligen Wert zuweisen. Wenn Sie sie in eine Enumeration überführen, schränken Sie die möglichen Werte auf eine genau definierte Teilmenge der Werte ein. Zweifellos ist das ein wesentlich besserer Ansatz zugunsten von Verständlichkeit und Wartbarkeit. Der eigentliche Haken verbirgt sich aber in der Tatsache, dass Enumerationen und beispielsweise Ganzzahlen unterschiedliche Typen sind und somit manchmal (und in der Tat recht häufig) eine Konvertierung oder Typwandlung erforderlich machen. Lassen Sie mich das an einem ersten Beispiel zeigen.

Nehmen Sie eine Klasse Match an, bei der die Eigenschaft Status vom Typ MatchStatus ist. Außerdem gibt es eine Benutzeroberfläche, um Informationen über ein Spiel zu sammeln. Gewünscht ist eine Dropdownliste mit Auswahlmöglichkeiten – mit einem Eintrag für jeden möglichen Status. Um die Liste zu füllen, ist folgender Code erforderlich:

DropDownList1.DataSource = Enum.GetNames(typeof(MatchStatus));

Die statische Methode GetNames gibt ein Array von Zeichenfolgen zurück, wobei jedes Element dem Namen einer Konstanten in der Aufzählung entspricht. Schon ganz gut, aber nicht perfekt. Die Drop-down-Liste wird eigentlich mit einzelnen Wörtern wie BeingCurrentPlayed gefüllt. Wenn Ihre Benutzer englisch sprechen und sich nicht daran stören, ist das ein brauchbarer Ansatz. Doch wie sieht es bei deutschen Benutzern aus, die keine englische Benutzeroberfläche mögen?

Was passiert überhaupt, wenn Sie versuchen, ein Element aus einer derartigen Drop-down-Liste auszuwählen, die an eine Enumeration gebunden ist? Eine Enumeration wird nur auf einer Ebene gebunden, wobei Sie lediglich die Beschriftung auswählen können, jedoch nicht den zurückgegebenen Wert. Im Ergebnis bringt Sie jede Auswahl wieder zurück zur Anzeigezeichenfolge. Wie können Sie nun diese in den tatsächlichen Wert vom Typ MatchStatus überführen? Um einen symbolischen Namen auf einen enumerierten Wert abzubilden, verwenden Sie die Parse-Methode, wie das folgende Codefragment zeigt:

Int32 value = (Int32) Enum.Parse(GetType(MatchStatus), "Completed")
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -