Imaginons que j'ai une énumération comme celle-ci (juste à titre d'exemple) :
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Comment puis-je écrire une routine pour obtenir ces valeurs dans un System.Web.Mvc.SelectList, étant donné que le contenu de l'énumération est susceptible de changer dans le futur ? Je veux obtenir le nom de chaque énumération comme texte de l'option, et sa valeur comme texte de la valeur, comme ceci :
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
C'est ce que j'ai trouvé de mieux jusqu'à présent :
public static SelectList GetDirectionSelectList()
{
Array values = Enum.GetValues(typeof(Direction));
List<ListItem> items = new List<ListItem>(values.Length);
foreach (var i in values)
{
items.Add(new ListItem
{
Text = Enum.GetName(typeof(Direction), i),
Value = i.ToString()
});
}
return new SelectList(items);
}
Cependant, le texte de l'option est toujours rendu par 'System.Web.Mvc.ListItem'. En déboguant, je constate également que Enum.GetValues() renvoie 'Horizontal, Vertical' etc. au lieu de 0, 1 comme je m'y attendais, ce qui me fait me demander quelle est la différence entre Enum.GetName() et Enum.GetValue().