解析StringValueAttribute以返回Enum

我目前有一个带有使用字符串值属性的枚举的Windows Phone 8.1运行时项目。 我希望能够通过使用字符串值属性来获取枚举值,例如使用“world”来获取summer的枚举值。 我正在使用Windows Phone 8.1运行时因此我发现的大多数方法都不起作用。

提前致谢。

public enum test { [StringValue("hello")] school, [StringValue("world")] summer, [StringValue("fall")] car } public class StringValueAttribute : Attribute { private string _value; public StringValueAttribute(string value) { _value = value; } public string Value { get { return _value; } } } 

要获取属性,您需要使用方法/扩展。 在回答这个问题和答案时,你可以做出这样的事情:

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

会给出“世界”的结果。 (与你想要的相反,但希望能让你知道如何处理这个问题)。

根据你想要实现的目标,你可以使用不同的方法linke:使用Dictionary, struct , properties和可能的不同方法。

至于解析枚举值,你可以像这样实现:

 test testValue = test.summer; string testString = testValue.ToString(); test EnumValue = (test)Enum.Parse(typeof(test), testString); 

编辑

如果你想从属性获取枚举,那么这个方法(可能应该改进)应该完成这项工作:

 public static T GetFromAttribute(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("world");