Чтобы добраться до ваших атрибутов, вам нужно будет использовать метод/расширение. Следуя этому вопросу и ответу, вы можете сделать следующее:
public class StringValueAttribute : Attribute
{
private string _value;
public StringValueAttribute(string value)
{
_value = value;
}
public string Value
{
get { return _value; }
}
public static string GetStringValue(Enum value)
{
Type type = value.GetType();
FieldInfo fi = type.GetRuntimeField(value.ToString());
return (fi.GetCustomAttributes(typeof(StringValueAttribute), false).FirstOrDefault() as StringValueAttribute).Value;
}
}
Затем, используя эту строку кода:
string stringTest = StringValueAttribute.GetStringValue(test.summer);
даст результат "мир". (Противоположно тому, что вы хотели, но, надеюсь, даст вам представление о том, как справиться с проблемой).
В зависимости от того, чего вы хотите достичь, вы, вероятно, можете использовать разные методы: используя Dictionary, struct, свойства и, возможно, по-разному.
Что касается анализа значений Enum, вы можете добиться этого следующим образом:
test testValue = test.summer;
string testString = testValue.ToString();
test EnumValue = (test)Enum.Parse(typeof(test), testString);
ИЗМЕНИТЬ
Если вы хотите получить перечисление из атрибута, то этот метод (вероятно, следует улучшить) должен выполнять эту работу:
public static T GetFromAttribute<T>(string attributeName)
{
Type type = typeof(T);
return (T)Enum.Parse(typeof(T), type.GetRuntimeFields().FirstOrDefault(
x => (x.CustomAttributes.Count() > 0 && (x.CustomAttributes.FirstOrDefault().ConstructorArguments.FirstOrDefault().Value as string).Equals(attributeName))).Name);
}
Использование:
test EnumTest = StringValueAttribute.GetFromAttribute<test>("world");
person
Romasz
schedule
25.04.2014