我有一个带有自定义属性的枚举,例如:
public enum EnumStatus
{
[CharValue('*')]
Empty,
[CharValue('A')]
value1,
[CharValue('P')]
value2,
}
“前进”的方式似乎很容易,随着枚举值的增加 自定义属性使用反射,GetCustomAttributes等。
但我想要某种反向解析。 有一个char值,我希望有一个枚举值来使用。
类似的东西:
public static Enum GetEnumValue(this Enum source, char value)
{...}
如果我将'A'作为值参数,则返回EnumStatus.value1。
任何想法?我不想制作额外的哈希表,推迟使用枚举。
非常感谢你!
答案 0 :(得分:1)
从我在这里做的例子:
public static T GetEnumValue<T, TExpected>(char value) where TExpected : Attribute
{
var type = typeof(T);
if (type.IsEnum)
{
foreach (var field in type.GetFields())
{
dynamic attribute = Attribute.GetCustomAttribute(field,
typeof(TExpected)) as TExpected;
if (attribute != null)
{
if (attribute.Value == value)
{
return (T)field.GetValue(null);
}
}
}
}
return default(T);
}
效果很好......
答案 1 :(得分:0)
我建议您使用DescriptionAttribute
并按照此处的示例进行操作:https://stackoverflow.com/a/4367868/905651。