Enumeration Utility Library
-
05-07-2019 - |
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"
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) { }
}