有没有一种方法可以遍历所有枚举值?

38 浏览
0 Comments

有没有一种方法可以遍历所有枚举值?

这个问题已经有了答案:

可能是重复问题:

C#:如何枚举枚举类型?

主题已经说得很清楚了。我想要使用它来在组合框中添加枚举的值。

谢谢

vIceBerg

admin 更改状态以发布 2023年5月22日
0
0 Comments

我知道其他人已经用正确的答案回答了,但是如果你想在组合框中使用枚举,你可能想额外努力一些,将字符串与枚举关联起来,以便在显示的字符串中提供更多详细信息(例如单词之间的空格或使用与您的编码标准不匹配的大小写的显示字符串)

这篇博客可能会有用 - 在c#中将字符串与枚举关联起来

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

作为奖励,他还提供了一个工具方法来枚举枚举,我现在已经用Jon Skeet的评论进行了更新

public static IEnumerable EnumToList()
    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 IEnumerable EnumToList()
    where T : struct
{
    return Enum.GetValues(typeof(T)).Cast();
}
// Using above method
statesComboBox.Items = EnumToList();
// Inline
statesComboBox.Items = Enum.GetValues(typeof(States)).Cast();

0
0 Comments

string[] names = Enum.GetNames (typeof(MyEnum));

然后只需用数组填充下拉列表

0