84 votes

C# numeric enum value as string

J'ai l'énumération suivante :

public enum Urgency {
    VeryHigh = 1,
    High     = 2,
    Routine  = 4
}

Je peux récupérer une valeur enum comme chaîne de caractères comme ceci :

((int)Urgency.Routine).ToString() // returns "4"  

Remarque : Ceci est différent de :

Urgency.Routine.ToString() // returns "Routine"
(int)Urgency.Routine       // returns 4

Existe-t-il un moyen de créer une classe d'extension, ou une classe d'utliité statique, qui fournirait un peu de sucre syntaxique ? :)

152voto

Scott Bartlett Points 244

Vous devriez juste être en mesure d'utiliser les surcharges de la méthode Enums ToString pour lui donner une chaîne de format, cela imprimera la valeur de l'enum comme une chaîne.

public static class Program
{
    static void Main(string[] args)
    {
        var val = Urgency.High;
        Console.WriteLine(val.ToString("D")); 
    }
}

public enum Urgency 
{ 
    VeryHigh = 1,
    High = 2,
    Low = 4
}

28voto

Stuart Helwig Points 3086

Afin d'obtenir des descriptions plus "lisibles par l'homme" pour les énumérations (par exemple "Très élevé" plutôt que "Très élevé" dans votre exemple), j'ai décoré les valeurs d'énumération avec l'attribut suivant :

public enum MeasurementType
{
    Each,

    [DisplayText("Lineal Metres")]
    LinealMetre,

    [DisplayText("Square Metres")]
    SquareMetre,

    [DisplayText("Cubic Metres")]
    CubicMetre,

    [DisplayText("Per 1000")]
    Per1000,

    Other
}


public class DisplayText : Attribute
{

    public DisplayText(string Text)
    {
        this.text = Text;
    }


    private string text;


    public string Text
    {
        get { return text; }
        set { text = value; }
    }
}

Ensuite, vous avez utilisé une méthode d'extension comme celle-ci :

    public static string ToDescription(this Enum en)
    {

        Type type = en.GetType();

        MemberInfo[] memInfo = type.GetMember(en.ToString());

        if (memInfo != null && memInfo.Length > 0)
        {

            object[] attrs = memInfo[0].GetCustomAttributes(
                                          typeof(DisplayText),

                                          false);

            if (attrs != null && attrs.Length > 0)

                return ((DisplayText)attrs[0]).Text;

        }

        return en.ToString();

    }

Vous pouvez alors simplement appeler

myEnum.ToDescription()

afin d'afficher votre énumération comme texte plus lisible.

4voto

David Moorhouse Points 276

Excellente chose ... J'ai maintenant ajouté une méthode d'extension à mon projet

public static class EnumExtensions 
{ 
    public static string NumberString(this Enum enVal) 
    { 
        return enVal.ToString("D"); 
    }
} 

Maintenant, je peux obtenir la valeur int - en tant que chaîne - en appelant Urgency.Routine.NumberString(); Merci à Frankentosh et Jon :)

3voto

Lauda Wang Points 342

une approche simple

((Urgency)4).ToString() // returns "Routine"

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X