Editar: He probado su enumeración, y es fetchable. Una llamada a Foo.GetEnumProperties devuelve una matriz con "TestProp" en ella:
public enum MyEnum
{
[XmlEnumAttribute("Twenty and Something")]
TwentyTree = 1,
[XmlEnumAttribute("Thirty and Something")]
Thirdyfour
}
class Foo
{
public MyEnum TestProp { get; set; }
/// <summary>
/// Get a list of properties that are enum types
/// </summary>
/// <returns>Enum property names</returns>
public static string[] GetEnumProperties()
{
MemberInfo[] members = typeof(Foo).FindMembers(MemberTypes.Property, BindingFlags.Public | BindingFlags.Static | BindingFlags.Instance, null, null);
List<string> retList = new List<string>();
foreach (MemberInfo nextMember in members)
{
PropertyInfo nextProp = nextMember as PropertyInfo;
if (nextProp.PropertyType.IsEnum)
retList.Add(nextProp.Name);
} return retList.ToArray();
}
}
para hacer lo que está tratando de hacer, yo uso System.ComponentModel.DescriptionAttribute, a continuación, se puede recuperar de esta manera:
/// <summary>
/// Get the description for the enum
/// </summary>
/// <param name="value">Value to check</param>
/// <returns>The description</returns>
public static string GetDescription(object 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)
{
string desc = attr.Description;
return desc;
}
}
}
return value.ToString();
}
Nit: Los números del 30 al 39 se deletrean "Treinta", no "Tercero". –
@JSBangs, concéntrate, por favor. : D – Custodio
@ Custódio ¿Qué es 'ReflectionUtil'? –