有没有办法迭代并反映枚举中包含的成员名称和值?

发布于 2024-08-20 09:40:27 字数 200 浏览 7 评论 0原文

假设我有以下enum

public enum Colors
{
    White = 10,
    Black = 20,
    Red = 30,
    Blue = 40
}

我想知道是否有一种方法可以迭代Colors 的所有成员来查找成员名称及其值。

Let's say I have the following enum:

public enum Colors
{
    White = 10,
    Black = 20,
    Red = 30,
    Blue = 40
}

I'm wondering if there is a way to iterate through all the members of Colors to find the member names and their values.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

娇纵 2024-08-27 09:40:27

您可以使用 Enum.GetNamesEnum.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]运行代码,它抛出异常,因为valuesArray类型。

You can use Enum.GetNames and 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));
}

Note: When I tried to run the code using values[i], it threw an exception because values is of type Array.

疏忽 2024-08-27 09:40:27

你可以这样做,

  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);
        }
    }

You could do something like this

  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()));
            }

Here is the extension itself:

  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);
        }
    }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文