Question

Je cherche une bibliothèque open source ou des exemples d'utilisation des types Enum dans .Net. En plus des extensions standard utilisées par les utilisateurs pour Enums (TypeParse, etc.), j'ai besoin d'un moyen d'effectuer des opérations telles que le renvoi de la valeur de l'attribut Description pour une valeur d'énumération donnée ou une valeur d'énumération ayant une valeur d'attribut Description. qui correspond à une chaîne donnée.

Par exemple:

//if extension method
var race = Race.FromDescription("AA") // returns Race.AfricanAmerican
//and
string raceDescription = Race.AfricanAmerican.GetDescription() //returns "AA"
Était-ce utile?

La solution

S'il n'y en a pas déjà un, lancez-en un! Vous pouvez probablement trouver toutes les méthodes dont vous avez besoin parmi d’autres réponses ici sur Stackoverflow - il suffit de les intégrer dans un projet. En voici quelques-uns pour vous aider à démarrer:

Obtenir la valeur d'énum Description:

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;
}

Obtention d'une valeur d'énumération nullable à partir de la chaîne:

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;
    }
}

Autres conseils

J'ai lu ce billet de blog l'autre jour sur l'utilisation de classes au lieu d'enums:

http: //www.lostechies .com / blogs / jimmy_bogard / archive / 2008/08/12 / enumeration-classes.aspx

Propose l'utilisation d'une classe abstraite comme base des classes enum. La classe de base contient des éléments tels que l'égalité, l'analyse, la comparaison, etc.

En l'utilisant, vous pouvez avoir des classes pour vos énumérations comme ceci (exemple tiré de l'article):

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) { }
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top