Aufzählungstypen und Erweiterungsmethoden (Teil 3)
Kommentare

Intern erzeugt die Methode GetItems eine Liste von EnumItem-Objekten, bei denen die Eigenschaft Value dem nativen Wert der Aufzählung entspricht und die Eigenschaft Description entweder die benannte Konstante

Intern erzeugt die Methode GetItems eine Liste von EnumItem-Objekten, bei denen die Eigenschaft Value dem nativen Wert der Aufzählung entspricht und die Eigenschaft Description entweder die benannte Konstante enthält oder – was günstiger ist – den Wert eines Attributs, das den Members der Aufzählung zugeordnet ist. Die Implementierung von GetDescriptionInternal ist in Listing 2 zu sehen:

Listing 2

private static 
   EnumItem GetDescriptionInternal(object val)
{
    // Uses reflection to access the Field member representing
    // the specified value in the underlying enumerated type.
    var field = val.GetType().GetField(val.ToString());

    // Checks whether the Field member has been decorated 
    // with a [Description] attribute.
    var attributes = (DescriptionAttribute[])
                        field.GetCustomAttributes(
                            typeof(DescriptionAttribute), 
                            false);
    
    // Creates the corresponding EnumItem object.
    var enumItem = new EnumItem
                        {
                           Description = attributes.Length > 0 
                              ? attributes[0].Description 
                              : val.ToString(),
                            Value = (T) val
                        };
    return enumItem;
}  

Die Methode GetDescriptionInternal verwendet das vom System bereitgestellte Description-Attribut, um die Werte in einem Aufzählungstyp damit auszustatten. Das Description-Attribut gehört zum Namespace System.ComponentModel. Ich habe mich für diesen nativen Typ entschieden und konnte in diesem Zusammenhang keine Probleme feststellen. Wenn es Ihnen lieber ist, können Sie hier aber auch ein benutzerdefiniertes Attribut verwenden (Listing 3).

Listing 3

public enum MatchStatus : int
{
    [Description("To be played")]
    ToBePlayed = 0,
    [Description("Currently played")]
    BeingCurrentlyPlayed = 1,
    [Description("Just played")]
    Completed = 2
}  

Die oben gezeigte MatchStatus-Aufzählung bindet der folgende Code an eine Drop-down-Liste, die den Inhalt des Description-Attributs anzeigt und den Ganzzahlwert des Typs zurückgibt:

var data = new MatchStatus().GetItems(); DropDownList1.DataSource = data;

Als Nächstes erfahren Sie, wie Sie einen Wert verarbeiten, der aus diesem datengebundenen Listensteuerelement ausgewählt wurde.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -