0

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

public enum EnumStatus
{
    [CharValue('*')]
    Empty,

    [CharValue('A')]
    value1,

    [CharValue('P')]
    value2,
}

“前进”方式似乎很容易,带有一个枚举值,并使用反射、GetCustomAttributes 等获取自定义属性。

但我想要某种反向解析。有一个 char 值,我想有一个 enum 值可以使用。

就像是:

public static Enum GetEnumValue(this Enum source, char value)
{...}

如果我将“A”作为值参数,它应该返回 EnumStatus.value1。

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

太感谢了!

4

2 回答 2

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);
    }

效果很好...

于 2012-04-14T11:06:17.723 回答
0

我建议使用DescriptionAttribute并遵循此处的示例:https ://stackoverflow.com/a/4367868/905651 。

于 2012-04-13T14:49:53.910 回答