69 votes

Enum au dictionnaire en C#

J'ai cherché en ligne, mais je ne trouve pas la réponse que je cherche.

En gros, j'ai l'énumération suivante :

 public enum typFoo : int
{
   itemA : 1,
   itemB : 2
   itemC : 3
}

Comment puis-je convertir cette énumération en dictionnaire afin qu'elle soit stockée dans le dictionnaire suivant ?

 Dictionary<int,string> myDic = new Dictionary<int,string>();

Et myDic ressemblerait à ceci :

 1, itemA
2, itemB
3, itemC

Des idées?

181voto

Ani Points 59747

Essayer:

 var dict = Enum.GetValues(typeof(fooEnumType))
               .Cast<fooEnumType>()
               .ToDictionary(t => (int)t, t => t.ToString() );

56voto

Zhais Points 701

Voir : Comment énumérer une énumération en C# ?

 foreach( typFoo foo in Enum.GetValues(typeof(typFoo)) )
{
    mydic.Add((int)foo, foo.ToString());
}

16voto

Arithmomaniac Points 1128

Adapter la réponse d'Ani pour qu'elle puisse être utilisée comme méthode générique (merci, toddmo ):

 public static Dictionary<int, string> EnumDictionary<T>()
{
    if (!typeof(T).IsEnum)
        throw new ArgumentException("Type must be an enum");
    return Enum.GetValues(typeof(T))
        .Cast<T>()
        .ToDictionary(t => (int)(object)t, t => t.ToString());
}

6voto

toddmo Points 510
  • Méthode d'extension
  • Dénomination conventionnelle
  • Une ligne
  • Syntaxe de retour C# 7 (mais vous pouvez utiliser des crochets dans ces anciennes versions héritées de C#)
  • Lance un ArgumentException si le type n'est pas System.Enum , grâce à Enum.GetValues
  • IntelliSense sera limité aux structures (aucune enum n'est encore disponible)
  • Vous permet d'utiliser enum pour indexer dans le dictionnaire, si vous le souhaitez.
 public static Dictionary<T, string> ToDictionary<T>() where T : struct
  => Enum.GetValues(typeof(T)).Cast<T>().ToDictionary(e => e, e => e.ToString());

4voto

j2associates Points 23

Une autre méthode d'extension qui s'appuie sur l'exemple d'Arithmomaniac :

     /// <summary>
    /// Returns a Dictionary&lt;int, string&gt; of the parent enumeration. Note that the extension method must
    /// be called with one of the enumeration values, it does not matter which one is used.
    /// Sample call: var myDictionary = StringComparison.Ordinal.ToDictionary().
    /// </summary>
    /// <param name="enumValue">An enumeration value (e.g. StringComparison.Ordianal).</param>
    /// <returns>Dictionary with Key = enumeration numbers and Value = associated text.</returns>
    public static Dictionary<int, string> ToDictionary(this Enum enumValue)
    {
        var enumType = enumValue.GetType();
        return Enum.GetValues(enumType)
            .Cast<Enum>()
            .ToDictionary(t => (int)(object)t, t => t.ToString());
    }

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