有没有办法遍历所有的枚举值?

可能重复:
C#:如何枚举枚举?

这个主题说了一切。 我想用它来添加组合框中枚举的值。

谢谢

vIceBerg


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

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


我知道其他人已经回答了一个正确的答案,但是,如果你想要在组合框中使用枚举,你可能想要去额外的院子,并将字符串关联到枚举,以便您可以提供更多的细节显示的字符串(例如单词之间的空格或使用与您的编码标准不匹配的套管显示字符串)

此博客条目可能会有用 - 将字符串与c#中的枚举相关联

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

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

public static IEnumerable<T> EnumToList<T>()
    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<T> enumValList = new List<T>();

    foreach (T val in enumValArray)
    {
        enumValList.Add(val.ToString());
    }

    return enumValList;
}

Jon还指出,在C#3.0中,它可以被简化为像这样的东西(现在它变得如此轻量级以至于我可以想象你可以在线执行它):

public static IEnumerable<T> EnumToList<T>()
    where T : struct
{
    return Enum.GetValues(typeof(T)).Cast<T>();
}

// Using above method
statesComboBox.Items = EnumToList<States>();

// Inline
statesComboBox.Items = Enum.GetValues(typeof(States)).Cast<States>();

使用Enum.GetValues方法:

foreach (TestEnum en in Enum.GetValues(typeof(TestEnum)))
{
    ...
}

您不需要将它们转换为字符串,这样,您也可以直接将SelectedItem属性强制转换为TestEnum值,从而将其恢复。

链接地址: http://www.djcxy.com/p/16279.html

上一篇: Is there a way to iterate through all enum values?

下一篇: How do I convert an enum to a list in C#?