有没有一种方法可以遍历所有枚举值?
有没有一种方法可以遍历所有枚举值?
这个问题已经有了答案:
可能是重复问题:
主题已经说得很清楚了。我想要使用它来在组合框中添加枚举的值。
谢谢
vIceBerg
admin 更改状态以发布 2023年5月22日
我知道其他人已经用正确的答案回答了,但是如果你想在组合框中使用枚举,你可能想额外努力一些,将字符串与枚举关联起来,以便在显示的字符串中提供更多详细信息(例如单词之间的空格或使用与您的编码标准不匹配的大小写的显示字符串)
这篇博客可能会有用 - 在c#中将字符串与枚举关联起来
public enum States { California, [Description("New Mexico")] NewMexico, [Description("New York")] NewYork, [Description("South Carolina")] SouthCarolina, Tennessee, Washington }
作为奖励,他还提供了一个工具方法来枚举枚举,我现在已经用Jon Skeet的评论进行了更新
public static IEnumerableEnumToList () where T : struct { 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 enumValList = new List (); foreach (T val in enumValArray) { enumValList.Add(val.ToString()); } return enumValList; }
Jon还指出,在C# 3.0中,可以将其简化为类似于以下内容(现在变得如此轻量级,以至于我想像您可以将其直接内联):
public static IEnumerableEnumToList () where T : struct { return Enum.GetValues(typeof(T)).Cast (); } // Using above method statesComboBox.Items = EnumToList (); // Inline statesComboBox.Items = Enum.GetValues(typeof(States)).Cast ();