10

重複の可能性:
列挙型の IEnumerable 拡張メソッド
ジェネリックを使用して、列挙型から IEnumerable を作成する方法を作成するにはどうすればよいですか?

次のような列挙型を指定します。

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

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

これらを「データ」と「値」という名前の 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 に答える