2016-08-30 1 views
2

Windows Store 앱용 앱을 개발 중이며 이와 같은 코드가 있습니다.Enum.Parse with annotation

public enum Categories 
{ 
    Cat1, 
    Cat2, 
    Cat3 
} 

Enumstring[] cats = {"categoty 1", "category 2", "category 3"}을 변환 할 수있는 옵션이 있습니까?

나는 EnumMember 속성을 사용하여 시도했다 :

[DataContract] 
public enum Categories 
{ 
    [EnumMember(Value = "category 1")] 
    Cat1, 

    [EnumMember(Value = "category 2")] 
    Cat2, 

    [EnumMember(Value = "category 3")] 
    Cat3 
} 

을 ...하지만 여전히 var cat = Enum.Parse(typeof(Categories), cats[0]);와 운 :

Exception thrown: 'System.ArgumentException' in mscorlib.ni.dll 
Requested value 'category 1' was not found. 

어떤 아이디어가?

+1

, 당신은 모든 열거 값의 속성을 검색하고 문자열을 비교하는 반사를 사용해야 할 것입니다. 더 쉬운 방법 (틀림없이 약간 유지하기 쉽지 않지만)은 단지 문자열을 열거 형 값에 매핑하는'Dictionary '를 포함하는 것입니다. –

+1

이 질문에 대한 답변을 통해 도움을 얻을 수 있습니다. http://stackoverflow.com/questions/19767863/cant-get-enum-to-convert-to-json-properly-using-json-net –

답변

1
private static T GetValueFromEnumMember<T>(string value) 
{ 
    var type = typeof(T); 
    if (type.GetTypeInfo().IsEnum) 
    { 
     foreach (var name in Enum.GetNames(type)) 
     { 
      var attr = type.GetRuntimeField(name).GetCustomAttribute<EnumMemberAttribute>(true); 
      if (attr != null && attr.Value == value) 
       return (T)Enum.Parse(type, name); 
     } 

     return default(T); 
    } 

    throw new InvalidOperationException("Not Enum"); 
} 

사용법 : 속성 접근

var cat = GetValueFromEnumMember<Categories>(cats[0]); 
+0

설명을 추가해주세요. 왜이 코드가 OP에 도움이되는지 알려줍니다. 이렇게하면 미래의 시청자가 배울 수있는 답을 제공하는 데 도움이됩니다. 자세한 내용은 [답변]을 참조하십시오. –