Imagínese que tengo una enumeración como este (sólo como ejemplo):Cómo obtener los valores de una enumeración en un SelectList
public enum Direction{
Horizontal = 0,
Vertical = 1,
Diagonal = 2
}
¿Cómo puedo escribir una rutina para obtener estos valores en un sistema. Web.Mvc.SelectList, dado que los contenidos de la enumeración están sujetos a cambios en el futuro? Quiero conseguir cada nombre enumeraciones como el texto de la opción, y su valor como texto de valor, como este:
<select>
<option value="0">Horizontal</option>
<option value="1">Vertical</option>
<option value="2">Diagonal</option>
</select>
Esto es lo mejor que puedo llegar a hasta el momento:
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);
}
Sin embargo esto siempre representa el texto de la opción como 'System.Web.Mvc.ListItem'. La depuración a través de esto también me muestra que Enum.GetValues () está devolviendo 'Horizontal, Vertical', etc. en lugar de 0, 1 como hubiera esperado, lo que me hace preguntar cuál es la diferencia entre Enum.GetName() y Enum. GetValue()
Este es un gran duplicado de http://stackoverflow.com/questions/1102022/display-enum-in-combobox-with-spaces y muchos, muchos otros. –
[Los detalles de las enumeraciones de C#] (http://www.codeducky.org/ins-outs-c-enums/) describe la conversión entre cadenas, números y enumeraciones, así como la forma de enumerar los valores de una enumeración. – ChaseMedallion