Cómo obtener los valores de una enumeración en una lista de selección

Imagina que tengo una enumeración como esta (solo como un ejemplo):

public enum Direction{
    Horizontal = 0,
    Vertical = 1,
    Diagonal = 2
}

¿Cómo puedo escribir una rutina para obtener estos valores en un System.Web.Mvc.SelectList, dado que los contenidos de la enumeración están sujetos a cambios en el futuro? Quiero obtener el nombre de cada enumeración como texto de 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 se me ocurre hasta ahora:

 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 ​​() devuelve 'Horizontal, Vertical', etc. en lugar de 0, 1 como hubiera esperado, lo que me hace preguntarme cuál es la diferencia entre Enum.GetName () y Enum. GetValue ().

Respuestas a la pregunta(12)

Su respuesta a la pregunta