2009-08-10 4 views
1

저는 C# 윈도우에서 작동합니다 ... vs05 ...... 열거 형 문자열에 공백을 넣고 싶습니다 ....이 코드는 다음과 같습니다 ..... 내 문제 콤보에서 값을 선택하면 어떻게됩니까?이 값의 색인 번호를 얻는 방법 ..... 그리고 내가 편집 모드로 간다면 사용자가 이미 선택되어있는 값을 보여줄 필요가 있습니다. ..... 얻는 방법 인덱스 번호의 기준으로 선택된 값을 열거 형C#에서 열거 형과 문자열 연결하기

public enum States 
{ 
    California, 
    [Description("New Mexico")] 
    NewMexico, 
    [Description("New York")] 
    NewYork, 
    [Description("South Carolina")] 
    SouthCarolina, 
    Tennessee, 
    Washington 
} 

public static string GetEnumDescription(Enum value) 
{ 
    FieldInfo fi = value.GetType().GetField(value.ToString()); 

    DescriptionAttribute[] attributes = 
        (DescriptionAttribute[])fi.GetCustomAttributes(
        typeof(DescriptionAttribute), false); 

    if (attributes != null && attributes.Length > 0) 
     return attributes[0].Description; 
    else 
     return value.ToString(); 
} 

public static IEnumerable<T> EnumToList<T>() 
{ 
    Type enumType = typeof(T); 

    // Can't use generic type constraints on value types, 
    // so have to do check like this 
    if (enumType.BaseType != typeof(Enum)) 
     throw new ArgumentException("T must be of type System.Enum"); 

    Array enumValArray = Enum.GetValues(enumType); 
    List<T> enumValList = new List<T>(enumValArray.Length); 

    foreach (int val in enumValArray) 
    { 
     enumValList.Add((T)Enum.Parse(enumType, val.ToString())); 
    } 

    return enumValList; 
} 

private void Form1_Load(object sender, EventArgs e) 
{ 
    //cboSurveyRemarksType = new ComboBox(); 
    cboSurveyRemarksType.Items.Clear(); 
    foreach (States state in EnumToList<States>()) 
    { 
     cboSurveyRemarksType.Items.Add(GetEnumDescription(state)); 
    } 
} 
+0

http://stackoverflow.com/questions/796607/how-do-i-override-tostring-in-cumens에서이 작업을 시도했습니다. 많은 사람들이 훌륭한 아이디어와 답변을주었습니다! – scraimer

답변

2
  1. 당신은 (Enum.GetValues(enumType)) 사용할 수있는 열거를 통해 반복하고 선택한 설명 (하지 최상의 성능을 가지고있는 하나 볼 수 있지만 아마도 콤보 박스 중요하지 않습니다 수).
  2. 당신은 당신의 자신의 속성을 만들고, 당신은 당신이 미리 캐시 할 수 옵션 # 1의 성능에 대한 설명과 함께 Dictionary<String, Integer> 오브젝트를 개선하려면
  3. (코딩 관행의 측면에서 추한)뿐만 아니라이 인덱스를 가질 수있다 각 열거 형을 대신 사용하십시오.
1

정수가 있고 그것을 다시 enum 유형으로 변환 하시겠습니까? 그냥 던져. 그래서 당신이 명시 적으로 열거 선언에서 모든 값을 지정하지 않은, 그리고 너무 오래 "인덱스"당신이있어 같이 0 기반 당신이 할 수있을 것입니다 :

States state = (States) stateIndex; 

(즉, 참고로 보통. NET 명명 규칙이 부분은 State이라고해야합니다. 복수형은 일반적으로 플래그 용으로 예약되어 있습니다.

이 답변은 코드가 아닌 질문 텍스트를 기반으로합니다. 코드에 아무것도 표시되지 않습니다. 이것은 실제로 색인을 참조합니다.

0

심플. 선택된 인덱스 (정수)를 States 열거 형으로 형변환 할 수 있습니다. 당신이 이해하지 않는 경우

private static void TestMethod() 
    { 
     foreach (States state in EnumToList<States>()) 
     { 
      Console.Write(GetEnumDescription(state) + "\t"); 
      Int32 index = ((Int32)state); 
      Console.Write(index.ToString() + "\t"); 
      States tempState = (States)index; 
      Console.WriteLine(tempState.ToString()); 

     } 
     Console.ReadLine(); 
    } 

이 더 명확하게 행복 할 것이다 : 나는 개념을 취소 도움이 열거 형을 사용하는 몇 가지 예를 보여줍니다 간단한 테스트 방법을 작성했습니다.

+0

그가 가지고있는 문제는 그가 이름에서 색인으로 가고 싶다는 것입니다. 당신은 그 반대를 제안하고 있습니다. –

+0

나는 그가 둘 다를 요구한다고 믿는다. 그의 마지막 구절은 "인덱스 번호를 기준으로 선택한 값을 열거하는 방법"입니다. –

관련 문제