2010-02-05 63 views

回答

12

您可以使用Enum.GetNamesEnum.GetValues

var names = Enum.GetNames(typeof(Colors)); 
var values = Enum.GetValues(typeof(Colors)); 

for (int i=0;i<names.Length;++i) 
{ 
    Console.WriteLine("{0} : {1}", names[i], (int)values.GetValue(i)); 
} 

注:當我試圖運行使用values[i]的代碼,它拋出一個異常,因爲valuesArray類型。

+0

哇,談論類似的例子。 +1。 – 2010-02-05 19:57:03

+0

@Ryan:是的 - 不是太不同;) – 2010-02-05 19:59:59

+0

很好的答案,但我很好奇:爲什麼'++ i'? – 2010-02-05 20:00:41

1

你可以做這樣的事情

for (int i = 0; i < typeof(DepartmentEnum).GetFields().Length - 1; i++) 
      { 
       DepartmentEnum de = EnumExtensions.NumberToEnum<DepartmentEnum>(i); 
       pairs.Add(new KeyValuePair<string, string>(de.ToDescription(), de.ToString())); 
      } 

這裏是擴展本身:

public static class EnumExtensions 
    { 
     public static string ToDescription(this Enum en) 
     { 
      Type type = en.GetType(); 

      MemberInfo[] memInfo = type.GetMember(en.ToString()); 

      if (memInfo != null && memInfo.Length > 0) 
      { 
       object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute),false); 

       if (attrs != null && attrs.Length > 0) 

        return ((DescriptionAttribute)attrs[0]).Description; 
      } 

      return en.ToString(); 
     } 

     public static TEnum NumberToEnum<TEnum>(int number) 
     { 
      return (TEnum)Enum.ToObject(typeof(TEnum), number); 
     } 
    } 
相關問題