10

可能重复:
枚举上的 IEnumerable 扩展方法
如何使用泛型创建从枚举生成 IEnumerable 的方法?

给定这样的枚举:

public enum City
{
    London    = 1,
    Liverpool  = 20,
    Leeds       = 25
}

public enum House
{
    OneFloor    = 1,
    TwoFloors = 2
}

如何将这些转换为 IEnumerable 列表,其中包含两个名为“数据”和“值”的字段。是否有可能有一个通用的方法或方法来做到这一点?请注意,这些值并不总是连续的。

4

3 回答 3

14

您可以使用Enum.GetValues

City[] values = (City[])Enum.GetValues(typeof(City));
var valuesWithNames = from value in values
                      select new { value = (int)value, name = value.ToString() };
于 2012-09-16T14:02:24.773 回答
3

怎么样:

//Tested on LINQPad
void Main()
{
    var test = GetDictionary<City>();
    Console.WriteLine(test["London"]);
}

public static IDictionary<string, int> GetDictionary<T>()
{
    Type type = typeof(T);
    if (type.IsEnum)
    {
        var values = Enum.GetValues(type);
        var result = new Dictionary<string, int>();
        foreach (var value in values)
        {
            result.Add(value.ToString(), (int)value);
        }
        return result;
    }
    else
    {
        throw new InvalidOperationException();
    }
}

public enum City
{
    London = 1,
    Liverpool = 20,
    Leeds = 25
}
于 2012-09-16T14:01:54.383 回答
2

你可以试试这个:

var cities Enum.GetValues(typeof(City)).OfType<City>()
               .Select(x =>
                    new
                    {
                         Value =  (int)x,
                         Text = x.ToString()
                    });

编辑

用演员代替 OfType

var cities = ((IEnumerable<City>)Enum.GetValues(typeof(City)))
                                     .Select(x => 
                                         new 
                                         {
                                             Value =  (int)x,
                                             Text = x.ToString()
                                         });
于 2012-09-16T14:08:16.433 回答