返回枚举名称基值

时间:2013-06-19 07:20:48

标签: c# asp.net foreach enums

我有一个枚举

public enum citys
{
       a=1,
       b=1,
       c=1,
       d=2,
       e=2,
       f=2,
};

我想基于价值返回Name。例如,foreach return Enum.GetNames Value =1

 result --> a,b,c
 foreach return Enum.GetNames that Value =2
 result --> d,e,f

感谢您的帮助。

1 个答案:

答案 0 :(得分:5)

你可以将Enum.GetNamesEnum.Parse结合使用 - 这不是我喜欢的事情,但它有效:

using System;
using System.Collections.Generic;
using System.Linq;

public enum City
{
       a=1,
       b=1,
       c=1,
       d=2,
       e=2,
       f=2,
}

class Test
{
    static void Main()
    {
        // Or GetNames((City) 2)
        foreach (var name in GetNames(City.a))
        {
            Console.WriteLine(name);
        }
    }

    static IEnumerable<string> GetNames<T>(T value) where T : struct
    {
        return Enum.GetNames(typeof(T))
                   .Where(name => Enum.Parse(typeof(T), name).Equals(value));
    }
}

或者你可以用反射得到字段:

static IEnumerable<string> GetNames<T>(T value) where T : struct
{
    return typeof(T).GetFields(BindingFlags.Public | BindingFlags.Static)
                    .Where(f => f.GetValue(null).Equals(value))
                    .Select(f => f.Name);
}

使用枚举是否是您想要实现的目标的良好设计并不是很清楚 - 这里的真正目标是什么?也许您应该使用查找?