2012-03-26 3 views

답변

0

Enum 클래스의 Enum.Parse 또는 Enum.TryParse 메서드를 사용할 수 있습니다.

샘플 :

CountryCodeEnum value = (CountryCodeEnum)Enum.Parse(SomeEnumStringValue); 
+0

'Enum.Parse'는 열거 형의 특성에 아무런주의를 기울이지 않습니다. 당신이 알라바마 대신에 "AL"을 주면 (OP가 지적한대로), 그것을 분석하지 않을 것입니다. – vcsjones

0

당신이 값 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. 
0

감사 : 여기

public enum Foo 
{ 
    [Display(Name = "Alabama", ShortName = "AL")] 
    Alabama = 1, 
} 

이 짧은 이름 = 'AL'의 속성을 가지고 Foo를 얻을 수있는 작은 코드 :

은의 우리의 열거는 다음과 같습니다 가정 해 봅시다 이미 주어진 답변과 일부 추가 연구에서 다른 사람들을 도울 수 있기를 희망하여 확장 방법으로 내 솔루션을 공유하고 싶습니다.

,

당신 같은이 확장을 사용할 수 있습니다

var type = MyEnum.Invalid; 
type.GetValueByShortName(shortNameToFind, type, out type); 
return type; 
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); 
    }