如何反向解析自定义属性?

时间:2012-04-13 14:43:38

标签: c# reflection attributes enums getcustomattributes

我有一个带有自定义属性的枚举,例如:

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。

任何想法?我不想制作额外的哈希表,推迟使用枚举。

非常感谢你!

2 个答案:

答案 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