Frage

Ich suche nach einer Open-Source-Bibliothek oder Beispielen für mit Enum-Typen in .NET arbeiten. Zusätzlich zu den Standard-Erweiterungen, die Menschen für Aufzählungen verwenden (TypeParse, etc.), ich brauche eine Art und Weise Operationen wie die Rückgabe des Werts des Attributs Beschreibung für einen bestimmten Enumerationswerts auszuführen oder ein Aufzählungswert zurückzugeben, die eine Beschreibung Attributwert hat dass entspricht eine angegebene Zeichenfolge zurück.

Zum Beispiel:

//if extension method
var race = Race.FromDescription("AA") // returns Race.AfricanAmerican
//and
string raceDescription = Race.AfricanAmerican.GetDescription() //returns "AA"
War es hilfreich?

Lösung

Wenn es nicht ein bereits, ein Start! Sie können sich wahrscheinlich alle Methoden, die Sie von anderen Antworten auf Stackoverflow hier brauchen finden - nur rollen sie in einem Projekt. Hier sind ein paar zum Einstieg:

Ankommen Wert Enum Beschreibung:

public static string GetDescription(this Enum value)
{
    FieldInfo field = value.GetType().GetField(value.ToString());
    object[] attribs = field.GetCustomAttributes(typeof(DescriptionAttribute), true));
    if(attribs.Length > 0)
    {
        return ((DescriptionAttribute)attribs[0]).Description;
    }
    return string.Empty;
}

Wie Sie einen Nullable-ENUM-Wert von string:

public static class EnumUtils
{
    public static Nullable<T> Parse<T>(string input) where T : struct
    {
        //since we cant do a generic type constraint
        if (!typeof(T).IsEnum)
        {
            throw new ArgumentException("Generic Type 'T' must be an Enum");
        }
        if (!string.IsNullOrEmpty(input))
        {
            if (Enum.GetNames(typeof(T)).Any(
                  e => e.Trim().ToUpperInvariant() == input.Trim().ToUpperInvariant()))
            {
                return (T)Enum.Parse(typeof(T), input, true);
            }
        }
        return null;
    }
}

Andere Tipps

Ich lese dieses Blog den anderen Tag veröffentlicht über Klassen statt Aufzählungen mit:

http: //www.lostechies .com / blogs / jimmy_bogard / Archiv / 2008/08/12 / Enumeration-classes.aspx

schlägt die Verwendung einer abstrakten Klasse, die als Grundlage der Enum-Klassen dienen. Basisklasse hat Dinge wie Gleichheit, analysieren, zu vergleichen, etc.

Mit ihm können Sie Klassen für Ihre Aufzählungen wie folgt aus (Beispiel aus dem Artikel genommen) haben:

public class EmployeeType : Enumeration
{
    public static readonly EmployeeType Manager 
        = new EmployeeType(0, "Manager");
    public static readonly EmployeeType Servant 
        = new EmployeeType(1, "Servant");
    public static readonly EmployeeType AssistantToTheRegionalManager 
        = new EmployeeType(2, "Assistant to the Regional Manager");

    private EmployeeType() { }
    private EmployeeType(int value, string displayName) : base(value, displayName) { }
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top