¿Cómo enum.getValues en .NET 3.5?
Pregunta
En .net 4.0, uso System.Enum.GetValues(typeof(Gender))
Para obtener la lista de elementos enum.
En un ejemplo completo, solía buscar el valor de Enum de esta manera:
Gender retVal = Gender.Male;
foreach (Gender enumType in System.Enum.GetValues(typeof(Gender)))
{
if (enumType.ToString().Trim().ToUpper().Substring(0,1).Equals(stringToEnum.Trim().ToUpper()))
{
retVal = enumType;
break;
}
}
Pero, ¿cómo podría hacer esto en .NET 3.5 (Pocket PC)?
Gracias por adelantado !
Utilizo las respuestas a continuación, pero no funciona para mí. Aquí está el código:
Valores de enum:
namespace Ionic.Zlib
{
public enum CompressionLevel
{
Level0 = 0,
None = 0,
Level1 = 1,
BestSpeed = 1,
Level2 = 2,
Level3 = 3,
Level4 = 4,
Level5 = 5,
Level6 = 6,
Default = 6,
Level7 = 7,
Level8 = 8,
BestCompression = 9,
Level9 = 9,
}
}
Uso:
Solo extraño inicializar un nuevo objeto. Esto funciona ahora:
public static Ionic.Zlib.CompressionLevel GetCompressionLevel(string Expression)
{
Ionic.Zlib.CompressionLevel result = Ionic.Zlib.CompressionLevel.None;
foreach (Ionic.Zlib.CompressionLevel item in EnumGetValues(new Ionic.Zlib.CompressionLevel()))
{
if(object.Equals(item.ToString().Trim().ToUpper(), Expression.Trim().ToUpper()))
{
result = item;
break;
}
}
return result;
}
Solución
Hay una publicación de blog aquí (archivado aquí) que lo logra a través de la reflexión:
public IEnumerable<Enum> GetValues(Enum enumeration)
{
List<Enum> enumerations = new List<Enum>();
foreach (FieldInfo fieldInfo in enumeration.GetType().GetFields(BindingFlags.Static | BindingFlags.Public))
{
enumerations.Add((Enum)fieldInfo.GetValue(enumeration));
}
return enumerations;
}
Otros consejos
System.Enum.GetValues
no es compatible con .NET CF 3.5, debe encontrar otra forma de iterar en su enum, por ejemplo, eche un vistazo aquí:
Además de la respuesta de Shamp00, sugeriría crear un método estático con un parámetro de tipo genérico. De esa manera, no necesita pasar una variable del tipo enum al método:
public static class EnumHelper
{
public static TEnum[] GetValues<TEnum>()
{
return typeof(TEnum)
.GetFields(BindingFlags.Static | BindingFlags.Public)
.Select(fieldInfo => (TEnum)fieldInfo.GetValue(null))
.ToArray();
}
}
Por lo general, no me gusta que la clase termine en "ayudante", pero usando solo Enum
En conflicto con el incorporado Enum
-clase.
Para usar este método, simplemente invoquelo con su tipo enum:
var values = EnumHelper.GetValues<MyEnum>();