Comment convertir une énumération dans une liste ?

J’ai une page Web asp.net-mvc et je veux afficher une liste déroulante basée sur une énumération. Je veux montrer le texte de chaque élément enum et l’id étant la valeur int à laquelle l’énum est associé. Y a-t-il une manière élégante de faire cette conversion?

Vous pouvez utiliser LINQ:

Enum.GetValues(typeof(MyEnum)).Cast().Select(v => new SelectListItem { Text = v.ToSsortingng(), Value = ((int)v).ToSsortingng() }).ToList(); 

Depuis MVC 5.1, la méthode la plus élégante consiste à utiliser la méthode EnumDropDownListFor de l’assistant HTML si vous devez renseigner select options select dans votre vue:

 @Html.EnumDropDownListFor(m => m.MyEnumProperty,new { @class="form-control"}) 

ou méthode GetSelectList de EnumHelper dans votre contrôleur:

 var enumList = EnumHelper.GetSelectList(typeof (MyEnum)); 

Vous pouvez utiliser Enum.GetNames() pour obtenir un tableau de chaînes contenant les noms des éléments enum. Si vos noms d’éléments sont conviviaux, alors c’est probablement suffisant. Sinon, vous pouvez créer votre propre méthode GetName() qui renverra un nom agréable pour chaque élément.

OU – si l’énumération ne changera jamais (ou rarement), vous pouvez simplement créer une méthode qui ajoute directement des éléments codés en dur à votre liste déroulante. C’est probablement plus efficace (si cela est important pour vous).

Je l’ai fait en utilisant une méthode statique que je pourrais réutiliser.

 public static IEnumerable EnumToSelectList() { return (Enum.GetValues(typeof(T)).Cast().Select( e => new SelectListItem() { Text = e.ToSsortingng(), Value = e.ToSsortingng() })).ToList(); } 

Maintenant, j’ai utilisé Tuple mais vous pouvez convertir cela pour utiliser n’importe quoi:

 var values = Enum.GetValues(typeof(DayOfWeek)) .Cast() .Select(d => Tuple.Create(((int)d).ToSsortingng(), d.ToSsortingng())) .ToList() 

J’ai utilisé GetEnumSelectList partir de la classe Html Helper