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 ...