c# - strings - Convierta un enum a List<string>
return enum c# (2)
¿Cómo convierto el siguiente Enum en una lista de cadenas?
[Flags]
public enum DataSourceTypes
{
None = 0,
Grid = 1,
ExcelFile = 2,
ODBC = 4
};
No pude encontrar esta pregunta exacta, este Enum to List es el más cercano, pero específicamente quiero List<string>
Quiero agregar otra solución: en mi caso, necesito usar un grupo Enum en un elemento de la lista de botones desplegables. Por lo tanto, pueden tener espacio, es decir, se necesitan descripciones más fáciles de usar:
public enum CancelReasonsEnum
{
[Description("In rush")]
InRush,
[Description("Need more coffee")]
NeedMoreCoffee,
[Description("Call me back in 5 minutes!")]
In5Minutes
}
En una clase de ayuda (HelperMethods) creé el siguiente método:
public static List<string> GetListOfDescription<T>() where T : struct
{
Type t = typeof(T);
return !t.IsEnum ? null : Enum.GetValues(t).Cast<Enum>().Select(x => x.GetDescription()).ToList();
}
Cuando llamas a este ayudante obtendrás la lista de descripciones de los artículos.
List<string> items = HelperMethods.GetListOfDescription<CancelReasonEnum>();
ADICIÓN: en cualquier caso, si desea implementar este método, necesita: la extensión GetDescription para enum. Esto es lo que uso
public static string GetDescription(this Enum value)
{
Type type = value.GetType();
string name = Enum.GetName(type, value);
if (name != null)
{
FieldInfo field = type.GetField(name);
if (field != null)
{
DescriptionAttribute attr =Attribute.GetCustomAttribute(field,typeof(DescriptionAttribute)) as DescriptionAttribute;
if (attr != null)
{
return attr.Description;
}
}
}
return null;
/* how to use
MyEnum x = MyEnum.NeedMoreCoffee;
string description = x.GetDescription();
*/
}
Usa el método estático de Enum
, GetNames
. Devuelve una string[]
, así:
Enum.GetNames(typeof(DataSourceTypes))
Si desea crear un método que solo haga esto para un solo tipo de enum
, y también lo convierte en una List
, puede escribir algo como esto:
public List<string> GetDataSourceTypes()
{
return Enum.GetNames(typeof(DataSourceTypes)).ToList();
}