771 votes

Comment convertir un enum en liste en C# ?

Existe-t-il un moyen de convertir un enum à une liste qui contient toutes les options de l'enum ?

19voto

Shark Points 117

Réponse très simple

Voici une propriété que j'utilise dans une de mes applications

    public List<string> OperationModes
    {
        get
        {
            return Enum.GetNames(typeof(SomeENUM)).ToList();
        }
    }

6voto

Voici pour l'utilité ... un peu de code pour obtenir les valeurs dans une liste, qui convertit l'énumération en forme lisible pour le texte.

public class KeyValuePair
  {
    public string Key { get; set; }

    public string Name { get; set; }

    public int Value { get; set; }

    public static List<KeyValuePair> ListFrom<T>()
    {
      var array = (T[])(Enum.GetValues(typeof(T)).Cast<T>());
      return array
        .Select(a => new KeyValuePair
          {
            Key = a.ToString(),
            Name = a.ToString().SplitCapitalizedWords(),
            Value = Convert.ToInt32(a)
          })
          .OrderBy(kvp => kvp.Name)
         .ToList();
    }
  }

et la méthode d'extension System.String correspondante :

/// <summary>
/// Split a string on each occurrence of a capital (assumed to be a word)
/// e.g. MyBigToe returns "My Big Toe"
/// </summary>
public static string SplitCapitalizedWords(this string source)
{
  if (String.IsNullOrEmpty(source)) return String.Empty;
  var newText = new StringBuilder(source.Length * 2);
  newText.Append(source[0]);
  for (int i = 1; i < source.Length; i++)
  {
    if (char.IsUpper(source[i]))
      newText.Append(' ');
    newText.Append(source[i]);
  }
  return newText.ToString();
}

6voto

J'ai toujours eu l'habitude d'obtenir une liste de enum comme ceci :

Array list = Enum.GetValues(typeof (SomeEnum));

5voto

Kiarash Points 478
public class NameValue
{
    public string Name { get; set; }
    public object Value { get; set; }
}

    public static List<NameValue> EnumToList<T>()
    {
        var array = (T[])(Enum.GetValues(typeof(T)).Cast<T>()); 
        var array2 = Enum.GetNames(typeof(T)).ToArray<string>(); 
        List<NameValue> lst = null;
        for (int i = 0; i < array.Length; i++)
        {
            if (lst == null)
                lst = new List<NameValue>();
            string name = array2[i];
            T value = array[i];
            lst.Add(new NameValue { Name = name, Value = value });
        }
        return lst;
    }

Convertir l'Enum en une liste plus détaillée sur
Convertir une Enum en liste

5voto

Shyam sundar shah Points 877
Language[] result = (Language[])Enum.GetValues(typeof(Language))

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