Glengamoi (Forum) · AspHeute · .NET Heute (RSS-Suche) · AspxFiles (Wiki) · .NET Blogs
ASP German Homepage Homepage
 

Liste

.NET 2.0 (1)
.NET Allgemein (16)
.NET Fu (5)
ADO.NET (11)
Aprilscherz (3)
ASP Grundlagen (44)
ASP Tricks (83)
ASP.NET (44)
ASPIntranet.de (5)
C# (28)
Datenbank (44)
Dokumentation (4)
IIS 6.0 (1)
Komponenten (29)
Optimierung (10)
Server (21)
Sicherheit (34)
Tee Off (6)
VB.NET (6)
WAP (8)
Web Services (11)
XML (9)

RSS 2.0 - Die neuesten fünf Artikel auf AspHeute.com


 

Suchen





 

English Articles
Chinese Articles
Unsere Autoren
 
Link zu AspHeute
Impressum
Werben
Anfragen

Enums lesbar machen

Geschrieben von: Christoph Wille
Kategorie: C#

Der heutige Artikel widmet sich einem Thema aus C#, das gerade bei der Entwicklung größerer Projekte interessant werden könnte - dem Konvertieren von Enum Werten in "lesbare" Strings.

Da das Ganze jetzt sehr abstrakt klingt, hier ein Beispiel einer Enum:

<script language="C#" runat=server>
enum Wochentag 
{ 
  Montag=1,   // Attributname = Attributwert
  Dienstag, 
  Mittwoch, 
  Donnerstag, 
  Freitag, 
  Samstag, 
  Sonntag 
};
</script>

Instanziert man eine Variable vom Typ Wochentag, so kann man nur Werte von 1 bis 7 zuweisen, oder die Attributnamen (sozusagen symbolische Konstanten):

Wochentag myDayTest1 = 1; // Montag
Wochentag myDayTest2 = Wochentag.Donnerstag; // Wert: 4

Mit solcherart typisierten Variablen verhindert man eine Menge von Fehlern. Allerdings stellt sich die Frage - jetzt habe ich eine tolle Enum, aber was, wenn ich die Attributnamen in einer DropDown Liste darstellen will, damit der Benutzer den Tag auswählen kann?

In solchen Fällen wurde dann meist auf zusätzliche Arrays ausgewichen, die die Attributnamen als Strings enthielten. Hier ein kleines VBScript Beispiel:

arrValues = Array("Montag", "Dienstag", "Mittwoch", "Donnerstag", ...)
For n=0 To UBound(arrValues)
  ...
Next

Klarerweise wird damit die Gefahr eingeführt, daß Attributnamen und das zusätzliche Array irgendwann nach Änderungen unterschiedliche Werte enthalten. Das ist nicht so wünschenswert. Nicht davon zu reden, wenn sich die Attributwerte ändern - dann wird es vollends haarig.

In C# kann man diese Klippe sehr elegant umschiffen (eigentlich .NET, aber wir wollen heute nicht kleinlich sein) - Enum's können die Werte formatiert ausgeben. Nachfolgend das Beispiel enum.aspx, das Teil des heutigen Downloads ist.

<%@ Page Language="C#" %>
<script language="C#" runat=server>
enum Wochentag 
{ 
  Montag=1, 
  Dienstag, 
  Mittwoch, 
  Donnerstag, 
  Freitag, 
  Samstag, 
  Sonntag 
};
</script>
<%
 // einfache Variable des Enum-Typs erzeugen
 Wochentag myDay;
 
 // erzeugen eines Arrays von Wochentag-Enum-Werten, sortiert nach Wert
 Array enValues = Enum.GetValues(typeof(Wochentag));
 
 for (int n=0; n < enValues.GetLength(0); n++)
 {
   myDay = (Wochentag)enValues.GetValue(n);
   Response.Write("Name=" + Enum.GetName(typeof(Wochentag), myDay));
   Response.Write(",  Wert=" + Enum.Format(typeof(Wochentag), myDay,"D") + "<br>");
 }
%>

Alles klar? <g/> Wer ASP.NET schon ein bischen kennt, fragt sich vielleicht, warum die Enum in einem separaten SCRIPT Block definiert ist - der Grund: es ist ein eigener (neuer) Typ, und da alles in <%%> in die Render Methode eingebaut wird, geht das nicht anders.

Der eigentliche Trick des Codes besteht darin, daß man über Enum.GetValues ein Array von Werten der Enum erhält (in unserem Fall also 7 Elemente). Über dieses Array läuft man dann mit einer for Schleife. Damit man den Attributnamen erhält, verwendet man die GetName Methode - diese ist genauso wie die Format() Methode eine statische Methode der System.Enum Klasse. Letztere Methode formatiert uns den Wert eines Enum-Typs als dezimale Zahl - und schon hat man eine Liste Name=Wert.

Der in enum.aspx gezeigt Code kann auf beliebige Elemente des Typs Wochentag angewendet werden. Will man alle Elemente des Enums in einer Schleife möglichst effizient ausgeben, eignet sich folgender Code dafür besser (enum_iterateonly.aspx):

<%@ Page Language="C#" %>
<script language="C#" runat=server>
 ... // gleich zu enum.aspx
</script>
<%
 // einfache Variable des Enum-Typs erzeugen
 Wochentag myDay;
 
 // beide Arrays werden nach Value sortiert geliefert, also synchron
 Array enValues = Enum.GetValues(typeof(Wochentag));
 string[] enNames = Enum.GetNames(typeof(Wochentag));
 
 for (int n=0; n < enValues.GetLength(0); n++)
 {
   Response.Write("Name=" + enNames[n]);
   myDay = (Wochentag)enValues.GetValue(n);
   Response.Write(",  Wert=" + Enum.Format(typeof(Wochentag), myDay,"D") + "<br>");
 }
%>

Der Unterschied ist, daß die Konstantennamen ebenfalls in ein Array ausgelesen werden - und zwar mit Hilfe der GetNames Methode. Und schon hat man eine effizientere Schleife als zuvor.

Schlußbemerkung

Mit diesem allgemein gehaltenen Code kann man nun DropDown Listen, oder welche Auswahlen auch immer befüllen gehen - Attributnamen und Attributwerte werden immer korrekt im Einklang miteinander stehen.

Download des Codes

Klicken Sie hier, um den Download zu starten.

Verwandte Artikel

Datentypen in C#
Deutsche Personalausweisnummern verifizieren
Schleifenbefehle in C#
Unions in C#
Wochenberechnung mit .NET

Wenn Sie jetzt Fragen haben...

Wenn Sie Fragen rund um die in diesem Artikel vorgestellte Technologie haben, dann schauen Sie einfach bei uns in den Community Foren der deutschen .NET Community vorbei. Die Teilnehmer helfen Ihnen gerne, wenn Sie sich zur im Artikel vorgestellten Technologie weiterbilden möchten.

Eine weitere sehr hilfreiche Resource ist das deutsche ASP.NET Wiki, das als zentrale Anlaufstelle für Tips, Tricks, Know How und alles Nützliche was man in seinem Alltag als (ASP).NET-Entwickler so braucht und entdeckt gedacht ist.

Haben Sie Fragen die sich direkt auf den Inhalt des Artikels beziehen, dann schreiben Sie dem Autor! Unsere Autoren freuen sich über Feedback zu ihren Artikeln. Ein einfacher Klick auf die Autor kontaktieren Schaltfläche (weiter unten) und schon haben Sie ein für diesen Artikel personalisiertes Anfrageformular.

 

Und zu guter Letzt möchten wir Sie bitten, den Artikel zu bewerten. Damit helfen Sie uns, die Qualität der Artikel zu verbessern - und anderen Lesern bei der Auswahl der Artikel, die sie lesen sollten.

Bewerten Sie diesen Artikel
 Sehr gut   Nicht genügend  
   1  2  3  4  5  
 

  
   Für Ausdruck optimierte Seite

©2000-2006 AspHeute.com
Alle Rechte vorbehalten. Der Inhalt dieser Seiten ist urheberrechtlich geschützt.
Eine Übernahme von Texten (auch nur auszugsweise) oder Graphiken bedarf unserer schriftlichen Zustimmung.