Kolumne: Dino talks

Aufzählungstypen und Erweiterungsmethoden
Kommentare

Immer wieder sehe ich raffinierte Lösungen und Tricks, die in einem begrenzten Rahmen angewandt werden und in einem speziellen Szenario wunderbar funktionieren. In diesen Fällen reizt es mich, die Lösung in einen breiteren Gültigkeitsbereich zu überführen und den Code zu refaktorisieren, um ihn nützlicher und allgemeiner zu gestalten. In diesem Artikel werde ich eine Lösung refaktorisieren, die ich im letzten Artikel vorgestellt habe, um die API zu verbessern, auf die Entwickler normalerweise zurückgreifen, wenn sie mit Aufzählungstypen arbeiten. Dabei werde ich Erweiterungsmethoden auf die Ebene der Enum-Klasse bringen, sodass Sie Hilfsroutinen im Handumdrehen wieder verwenden können, ohne die Erweiterungen für jeden einzelnen Aufzählungstyp neu schreiben zu müssen.

In einer meiner jüngsten Anwendungen musste ich eine Drop-down-Liste mit dem Inhalt eines Aufzählungstyps füllen. Dies lässt sich relativ leicht bewerkstelligen. Dazu brauchen Sie lediglich die statische Methode GetValues auf der Enum-Klasse aufzurufen, eine Liste der Zeichenfolgen zu erstellen und die Auflistung an die Drop-down-Liste zu binden. Diese Lösung ist zwar einfach zu programmieren, jedoch weit davon entfernt, perfekt zu sein. Auf den zweiten – und genaueren – Blick jedoch müssen Sie erkennen, dass eine derartige Lösung so weit von der Perfektion entfernt ist, dass sie in einer praktischen Anwendung kaum nützlich ist. Kein Kunde würde es hinnehmen, eine Option in „KamelSchreibweise“ wie zum Beispiel AusstehendeBestellung auszuwählen. Stattdessen möchte der Kunde einen benutzerfreundlichen und lokalisierten Text sehen. Um dieses Ziel zu erreichen, können Sie nicht einfach eine direkte Bindung zwischen dem Steuerelement Drop-down-Liste und dem Aufzählungstyp einrichten. Meistens werden Sie also auf irgendein zwischengeschaltetes Datentransferobjekt zurückgreifen. Vor allem aber müssen Sie für jeden Aufzählungstyp, den Sie binden möchten, einen eigenen Datentransfertyp erzeugen und verwalten.

In einem meiner letzten Artikel habe ich erläutert, wie Sie durch Erweiterungsmethoden die Abstraktionsebene des Codes verbessern, mit dem Sie Aufzählungstypen an datengebundene Steuerelemente binden. Dieses Projekt werde ich nun verallgemeinern, damit es mit jedem beliebigen Aufzählungstyp funktioniert.

Wunschzettel

Zunächst legen wir eine Liste der Features an, die über die Klasse System.Enum zugänglich sein sollen. An erster Stelle steht dabei, dass die Klasse System.Enum in der Lage sein sollte, ihre Werte als bindungsfähige Auflistung verfügbar zu machen, bei der sich der Beschreibungstext durch Entwickler steuern und geeignet lokalisieren lässt. Zweitens brauchen wir eine schnelle Möglichkeit, um den aufgezählten Wert in seinen nativen Typ zu konvertieren. Meistens liegen die Werte eines Aufzählungstyps als reine Ganzzahlen vor. Allerdings können Sie nicht einfach einen Wert eines Aufzählungstyps an einer Stelle übergeben, wo eine Ganzzahl erwartet wird, und umgekehrt. Es ist also eine Typumwandlung erforderlich.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -