Imaginez que j'ai une énumération comme celle-ci (comme un exemple):Comment obtenir les valeurs d'un ENUM dans un SelectList
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
Comment puis-je écrire une routine pour obtenir ces valeurs dans un système. 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érations que le texte de l'option, et sa valeur en tant que texte de valeur, comme celui-ci:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
C'est le meilleur que je peux trouver à ce jour:
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 cela affiche toujours le texte d'option en tant que 'System.Web.Mvc.ListItem'. Déboguer à travers cela me montre aussi que Enum.GetValues () retourne "Horizontal, Vertical" etc au lieu de 0, 1 comme je l'aurais attendu, ce qui me fait me demander quelle est la différence entre Enum.GetName() et Enum. GetValue().
Ceci est une grande copie de http://stackoverflow.com/questions/1102022/display-enum-in-combobox-with-spaces et beaucoup, beaucoup d'autres. –
[Les tenants et les aboutissants de C# enums] (http://www.codeducky.org/ins-outs-c-enums/) décrit la conversion entre les chaînes, les nombres et les énumérations ainsi que la façon d'énumérer les valeurs d'une énumération. – ChaseMedallion