当前位置:  开发笔记 > 编程语言 > 正文

有没有办法迭代所有枚举值?

如何解决《有没有办法迭代所有枚举值?》经验,为你挑选了4个好方法。

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

此博客条目可能很有用 - 将字符串与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;
}

乔恩还指出,在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();


angry person.. 10

使用Enum.GetValues方法:

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

您不需要将它们转换为字符串,这样您就可以通过直接将SelectedItem属性转换为TestEnum值来检索它们.



1> albertein..:
string[] names = Enum.GetNames (typeof(MyEnum));

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



2> Ray Hayes..:

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

此博客条目可能很有用 - 将字符串与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;
}

乔恩还指出,在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();



3> angry person..:

使用Enum.GetValues方法:

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

您不需要将它们转换为字符串,这样您就可以通过直接将SelectedItem属性转换为TestEnum值来检索它们.



4> Firas Assaad..:

您可以迭代Enum.GetNames方法返回的数组.

public class GetNamesTest {
    enum Colors { Red, Green, Blue, Yellow };
    enum Styles { Plaid, Striped, Tartan, Corduroy };

    public static void Main() {

        Console.WriteLine("The values of the Colors Enum are:");
        foreach(string s in Enum.GetNames(typeof(Colors)))
            Console.WriteLine(s);

        Console.WriteLine();

        Console.WriteLine("The values of the Styles Enum are:");
        foreach(string s in Enum.GetNames(typeof(Styles)))
            Console.WriteLine(s);
    }
}

推荐阅读
谢谢巷议
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有