Aufzählungstypen und Erweiterungsmethoden (Teil 2)
Kommentare

Doch damit nicht genug. Es ist durchaus üblich, Werte von Aufzählungstypen an Steuerelemente mit Auswahlmöglichkeiten wie zum Beispiel Drop-down-Listen oder Listenfelder zu binden. Wenn dann der Benutzer

Doch damit nicht genug. Es ist durchaus üblich, Werte von Aufzählungstypen an Steuerelemente mit Auswahlmöglichkeiten wie zum Beispiel Drop-down-Listen oder Listenfelder zu binden. Wenn dann der Benutzer einen Eintrag auswählt, liefert das datengebundene Steuerelement den beschreibenden Namen des Aufzählungstyps. Damit haben Sie eine Zeichenfolge und diese lässt sich nicht direkt in eine Ganzzahl umwandeln. Es ist ein Zwischenschritt erforderlich, der die Zeichenfolge in einen Wert parst und dann in eine Instanz des nativen Aufzählungstyps konvertiert. Der entsprechende Code macht zwar nur wenige Zeilen aus, doch müssen diese Codezeilen recht oft wiederholt werden. Sehen Sie sich nun an, wie Sie den Typ System.Enum mit einem Bündel von Erweiterungsmethoden ausstatten können, um das Arbeiten mit Aufzählungstypen zu erleichtern.

Ein bindungsfähiges Objekt abrufen

Die native Methode GetValues der Klasse System.Enum liefert eine Auflistung von Zeichenfolgen, in der jede Zeichenfolge den Namen eines Elements der Aufzählung repräsentiert. Unser Ziel ist es nun, eine bindungsfähige Auflistung aus dem Aufzählungstyp herauszuziehen. In dieser Auflistung ist der Wert nichts weiter als der native Wert der Aufzählung und der Anzeigetext eine anpassbare und lokalisierbare Zeichenfolge, die in bestimmter Weise mit den Werten der Aufzählung verknüpft ist. Um die Fähigkeiten der Klasse System.Enum zu erweitern, ohne den Entwickler zu zwingen, die ihm vertraute .NET API zu modifizieren, gibt es nur eine Option: die Verwendung von Erweiterungsmethoden. Der folgende Code zeigt eine mögliche Signatur für die Erweiterungsmethode, die eine bindungsfähige Auflistung aus einem Aufzählungstyp zurückgibt:

public static  IList> GetItems(this Enum enumeration) {   ... }

Die Methode GetItems übernimmt keine benutzerdefinierten Parameter und gibt eine Liste von EnumItem-Objekten zurück. Die Klasse EnumItem gehört zu unserer Bibliothek und ist folgendermaßen definiert:

public class EnumItem {     public String Description { get; set; }     public T Value { get; set; } }

Wenn Sie mit den Grundlagen der Datenbindung im .NET Framework vertraut sind, fallen Ihnen sicherlich die Ähnlichkeiten zwischen EnumItem und ListItem ins Auge – der Klasse, die in ASP.NET verwendet wird, um Listensteuerelemente wie zum Beispiel CheckBoxList und RadioButtonList zu füllen. Ganz allgemein enthält EnumItem zwei Eigenschaften: den Anzeigetext des gebundenen Elements und dessen Wert, ausgedrückt als generischer Typ T. Das Listing 1 zeigt die Implementierung der Methode GetItems:

Listing 1

public static 
   IList> GetItems(this Enum enumeration)
{
    // Get the type of the underlying enumeration.
       var enumType = enumeration.GetType();

    // String-array returning the names of the 
    // values in the enumeration.
    var values = Enum.GetValues(enumType);

    // Create and populate a new EnumItem list.
    var items = new List>();
    foreach(var v in values)
    {
        // Grab the native value of the enumerated item.
        var enumValue = Enum.Parse(enumType, v.ToString());

        // Have an internal helper function to create the 
        // EnumItem wrapper object.
        items.Add(GetDescriptionInternal(enumValue));
    }

    // Return the newly created collection.
    return items;
}  
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -