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 ?

4voto

private List<SimpleLogType> GetLogType()
{
  List<SimpleLogType> logList = new List<SimpleLogType>();
  SimpleLogType internalLogType;
  foreach (var logtype in Enum.GetValues(typeof(Log)))
  {
    internalLogType = new SimpleLogType();
    internalLogType.Id = (int) (Log) Enum.Parse(typeof (Log), logtype.ToString(), true);
    internalLogType.Name = (Log)Enum.Parse(typeof(Log), logtype.ToString(), true);
    logList.Add(internalLogType);
  }
  return logList;
}

dans le code supérieur, Log est une Enum et SimpleLogType est une structure pour les logs.

public enum Log
{
  None = 0,
  Info = 1,
  Warning = 8,
  Error = 3
}

3voto

Bryan Rowe Points 3629

Je pense que si vous cherchez à faire cela, vous devriez vous demander si vous devez vraiment utiliser un enum ou si vous devriez passer à un objet qui représente w/e votre enum est.

2voto

frigate Points 11
/// <summary>
/// Method return a read-only collection of the names of the constants in specified enum
/// </summary>
/// <returns></returns>
public static ReadOnlyCollection<string> GetNames()
{
    return Enum.GetNames(typeof(T)).Cast<string>().ToList().AsReadOnly();   
}

T est un type d'énumération ; Ajouter ceci :

using System.Collections.ObjectModel;

1voto

xajler Points 21

Si vous voulez l'Enum int comme clé et le nom comme valeur, c'est bien si vous stockez le nombre dans la base de données et qu'il provient de l'Enum !

void Main()
{
     ICollection<EnumValueDto> list = EnumValueDto.ConvertEnumToList<SearchDataType>();

     foreach (var element in list)
     {
        Console.WriteLine(string.Format("Key: {0}; Value: {1}", element.Key, element.Value));
     }

     /* OUTPUT:
        Key: 1; Value: Boolean
        Key: 2; Value: DateTime
        Key: 3; Value: Numeric         
     */
}

public class EnumValueDto
{
    public int Key { get; set; }

    public string Value { get; set; }

    public static ICollection<EnumValueDto> ConvertEnumToList<T>() where T : struct, IConvertible
    {
        if (!typeof(T).IsEnum)
        {
            throw new Exception("Type given T must be an Enum");
        }

        var result = Enum.GetValues(typeof(T))
                         .Cast<T>()
                         .Select(x =>  new EnumValueDto { Key = Convert.ToInt32(x), 
                                       Value = x.ToString(new CultureInfo("en")) })
                         .ToList()
                         .AsReadOnly();

        return result;
    }
}

public enum SearchDataType
{
    Boolean = 1,
    DateTime,
    Numeric
}

-1voto

Vitall Points 386

Vous pouvez utiliser la méthode générique suivante :

    public static List<T> GetItemsList<T>(this int enums) where T : struct, IConvertible
    {
        if (!typeof (T).IsEnum)
        {
            throw new Exception("Type given must be an Enum");
        }

        return (from int item in Enum.GetValues(typeof (T))
                where (enums & item) == item
                select (T) Enum.Parse(typeof (T), item.ToString(new CultureInfo("en")))).ToList();
    }

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