0

次のようなカスタム属性を持つ列挙型があります。

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 が返されます。

何か案は?列挙型を延期して、余分なハッシュテーブルを作成したくありません。

どうもありがとうございます!

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

https://stackoverflow.com/a/4367868/905651DescriptionAttributeの例を使用して、次の例に従うことをお勧めします。

于 2012-04-13T14:49:53.910 に答える