7
比方說,我有以下enum
:是否有迭代和反映枚舉中包含的成員名稱和值的方法?
public enum Colors
{
White = 10,
Black = 20,
Red = 30,
Blue = 40
}
我不知道是否有一種方法通過Colors
所有成員進行迭代找到成員名稱和它們的值。
比方說,我有以下enum
:是否有迭代和反映枚舉中包含的成員名稱和值的方法?
public enum Colors
{
White = 10,
Black = 20,
Red = 30,
Blue = 40
}
我不知道是否有一種方法通過Colors
所有成員進行迭代找到成員名稱和它們的值。
您可以使用Enum.GetNames和Enum.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]
的代碼,它拋出一個異常,因爲values
是Array
類型。
你可以做這樣的事情
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);
}
}
哇,談論類似的例子。 +1。 – 2010-02-05 19:57:03
@Ryan:是的 - 不是太不同;) – 2010-02-05 19:59:59
很好的答案,但我很好奇:爲什麼'++ i'? – 2010-02-05 20:00:41