Obtener una lista <string> de mis atributos de enumeración con un método genérico

Al inicio, tenemos esta enumeración básica.

public enum E_Levels {

    [ValueOfEnum("Low level")]
    LOW,

    [ValueOfEnum("Normal level")]
    NORMAL,

    [ValueOfEnum("High level")]
    HIGH
}

Y me gustaría conseguir unList<string> cualquiera que sea la enumeración. Algo comoExtensions.GetValuesOfEnum<E_Levels>() que podría devolver unList<string> con "Nivel bajo", "Nivel normal" y "Nivel alto" en él.

StackOF me ayudó a conseguiruno atributo de valor:

public static class Extensions {

    public static string ToValueOfEnum(this Enum value) {

        FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
        ValueOfEnum[] attribs = fieldInfo.GetCustomAttributes(typeof(ValueOfEnum), false) as ValueOfEnum[];
        return attribs.Length > 0 ? attribs[0].value : null;
    }
}

Y puedo llamar a este método cualquiera que sea la enumeración:E_Levels.LOW.ToValueOfEnum().

Además, StackOF me ayudó a conseguir unList<string> paraespecífico enumerar Hice este método en un controlador:

private List<string> GetLevels() {

List<string> levelsToReturn = new List<string>();
var levels = Enum.GetValues(typeof(E_Levels)).Cast<E_Levels>();
foreach(E_Levels l in levels) 
    levelsToReturn.Add(l.ToValueOfEnum());

return levelsToReturn;
}

Pero de esta manera me obliga a volver a escribir el mismo método para cada enumeración.
Así que intenté agregar este método genérico a mis Extensiones de clase:

public static class Extensions {

    public static string ToValueOfEnum(this Enum value) {...}

    public static List<string> GetValuesOf<T>() {

        List<string> levelsToReturn = new List<string>();
        var levels = Enum.GetValues(typeof(T)).Cast<T>();
        foreach(T l in levels) 
        levelsToReturn.Add(l.ToValueOfEnum());

        return levelsToReturn;
    }
}

Pero en mi foreach,.ToValueOfEnum() Es un método desconocido.

Así que estoy en problemas, esperaba poder encontrar una manera de no volver a escribir una y otra vez el mismo método para cada enumeración ...

Respuestas a la pregunta(3)

Su respuesta a la pregunta