나는 짧은 Diplay 이름을 얻고 그것을 사용하여 enum 값을 얻어야합니까?표시 이름이 짧은 경우 열거 형을 가져 오는 방법은 무엇입니까?
[Display(Name = "Alabama", ShortName = "AL")]
Alabama = 1,
외부 데이터베이스에서 AL을 수신합니다. 어떻게 든 열거하고 올바른 가치를 얻을 필요가 있습니다. 어떤 도움을 주셔서 감사합니다.
나는 짧은 Diplay 이름을 얻고 그것을 사용하여 enum 값을 얻어야합니까?표시 이름이 짧은 경우 열거 형을 가져 오는 방법은 무엇입니까?
[Display(Name = "Alabama", ShortName = "AL")]
Alabama = 1,
외부 데이터베이스에서 AL을 수신합니다. 어떻게 든 열거하고 올바른 가치를 얻을 필요가 있습니다. 어떤 도움을 주셔서 감사합니다.
Enum 클래스의 Enum.Parse 또는 Enum.TryParse 메서드를 사용할 수 있습니다.
샘플 :
CountryCodeEnum value = (CountryCodeEnum)Enum.Parse(SomeEnumStringValue);
당신이 값 AL
를 부여하고, 그 속성이 열거 값을 찾으려면, 당신은 그것을 알아 내기 위해 반사의 약간을 사용할 수 있습니다. 에서 도움을
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.
감사 : 여기
public enum Foo
{
[Display(Name = "Alabama", ShortName = "AL")]
Alabama = 1,
}
이 짧은 이름 = 'AL'의 속성을 가지고
Foo
를 얻을 수있는 작은 코드 :
은의 우리의 열거는 다음과 같습니다 가정 해 봅시다 이미 주어진 답변과 일부 추가 연구에서 다른 사람들을 도울 수 있기를 희망하여 확장 방법으로 내 솔루션을 공유하고 싶습니다.
,당신 같은이 확장을 사용할 수 있습니다
var type = MyEnum.Invalid;
type.GetValueByShortName(shortNameToFind, type, out type);
return type;
@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);
}
'Enum.Parse'는 열거 형의 특성에 아무런주의를 기울이지 않습니다. 당신이 알라바마 대신에 "AL"을 주면 (OP가 지적한대로), 그것을 분석하지 않을 것입니다. – vcsjones