我得到一个Short Diplay名称,我需要使用它获得枚举值吗?
[Display(Name = "Alabama", ShortName = "AL")]
Alabama = 1,
我刚从外部数据库获取AL。我需要以某种方式阅读我的枚举并获得适当的价值。谢谢你的帮助。
答案 0 :(得分:0)
您可以使用Enum类的Enum.Parse或Enum.TryParse方法。
样品:
CountryCodeEnum value = (CountryCodeEnum)Enum.Parse(SomeEnumStringValue);
答案 1 :(得分:0)
如果给出值AL
,并且想要找到具有该属性的枚举值,则可以使用一点反射来计算出来。
让我们说我们的枚举看起来像这样:
public enum Foo
{
[Display(Name = "Alabama", ShortName = "AL")]
Alabama = 1,
}
这是一个小代码,用于获取具有ShortName ='AL'属性的Foo
:
var shortName = "AL"; //Or whatever
var fields = typeof (Foo).GetFields(BindingFlags.Static | BindingFlags.Public);
var values = from f
in fields
let attribute = Attribute.GetCustomAttribute(f, typeof (DisplayAttribute)) as DisplayAttribute
where attribute != null && attribute.ShortName == shortName
select f.GetValue(null);
//Todo: Check that "values" is not empty (wasn't found)
Foo value = (Foo)values.First();
//value will be Foo.Alabama.
答案 2 :(得分:0)
感谢已经给出的答案和一些其他研究的帮助,我想将此解决方案作为一种扩展方法分享,希望它可以帮助其他人:
public static void GetValueByShortName<T>(this Enum e, string shortName, T defaultValue, out T returnValue)
{
returnValue = defaultValue;
var values = from f in typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public)
let attribute = Attribute.GetCustomAttribute(f, typeof(DisplayAttribute)) as DisplayAttribute
where attribute != null && attribute.ShortName == shortName
select (T)f.GetValue(null);
if (values.Count() > 0)
{
returnValue = (T)(object)values.FirstOrDefault();
}
}
您可以使用此扩展程序:
var type = MyEnum.Invalid;
type.GetValueByShortName(shortNameToFind, type, out type);
return type;
答案 3 :(得分:0)
@jasel我稍微修改你的代码。这非常适合我所需要的。
public static T GetValueByShortName<T>(this string shortName)
{
var values = from f in typeof(T).GetFields(BindingFlags.Static | BindingFlags.Public)
let attribute = Attribute.GetCustomAttribute(f, typeof(DisplayAttribute)) as DisplayAttribute
where attribute != null && attribute.ShortName == shortName
select (T)f.GetValue(null);
if (values.Count() > 0)
{
return (T)(object)values.FirstOrDefault();
}
return default(T);
}