3 回答
TA贡献1836条经验 获得超13个赞
这是我用于此特定目的的几种扩展方法,我将它们重写为使用您的StringValueAttribute,但像Oliver一样,我在代码中使用了DescriptionAttribute。
public static T FromEnumStringValue<T>(this string description) where T : struct {
Debug.Assert(typeof(T).IsEnum);
return (T)typeof(T)
.GetFields()
.First(f => f.GetCustomAttributes(typeof(StringValueAttribute), false)
.Cast<StringValueAttribute>()
.Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))
)
.GetValue(null);
}
在.NET 4.5中,这可以变得稍微简单一些:
public static T FromEnumStringValue<T>(this string description) where T : struct {
Debug.Assert(typeof(T).IsEnum);
return (T)typeof(T)
.GetFields()
.First(f => f.GetCustomAttributes<StringValueAttribute>()
.Any(a => a.Value.Equals(description, StringComparison.OrdinalIgnoreCase))
)
.GetValue(null);
}
要调用它,只需执行以下操作:
Als result = ComboBox.SelectedValue.FromEnumStringValue<Als>();
相反,这是一个从枚举值获取字符串的函数:
public static string StringValue(this Enum enumItem) {
return enumItem
.GetType()
.GetField(enumItem.ToString())
.GetCustomAttributes<StringValueAttribute>()
.Select(a => a.Value)
.FirstOrDefault() ?? enumItem.ToString();
}
并称之为:
string description = Als.NietBeantwoord.StringValue()
- 3 回答
- 0 关注
- 512 浏览
添加回答
举报