如何通过枚举绑定列表

时间:2011-12-14 19:14:57

标签: c#

我试图用枚举绑定一个列表。枚举具有以下值

public enum Degree
{

    Doctorate = 1,
    Masters = 2,
    Bachelors = 3,
    Diploma = 4,
    HighSchool = 5,
    Others = 6
}

并且列表是以下类的类型

class List1
{
    public string Text{get; set;}
    public string Value{get; set;}
}

如何映射?

3 个答案:

答案 0 :(得分:6)

这是一个非常简单的LINQ解决方案:

var t = typeof(Degree);
var list = Enum.GetValues(t).Cast<int>().Zip(Enum.GetNames(t), 
    (value, name) => new List1{Text = name, Value = value.ToString()}
    ).ToList();

这显然也可以转化为扩展方法。

有关详细信息,请参阅:
Enum.GetValues
Enum.GetNames
LINQ Enumerable.Zip

更新

由于Zip方法仅适用于.NET 4.0,因此这是另一种3.0方法。

var t = typeof(Degree);
var list = Enum.GetValues(t).Cast<Degree>().Select(
    value => new List1{ Text = value.ToString(), Value = ((int)value).ToString() }
    ).ToList();

如果您需要2.0答案,请查看@ Dewasish的答案。

答案 1 :(得分:3)

试试这个:

private List<SelectListItem> MapDegree()
        {
            var enumerationValues = Enum.GetValues(typeof(Degree));
            var enumerationNames = Enum.GetNames(typeof(Degree));
            List<List1> lists = new List<List1>();
            foreach (var value in Enum.GetValues(typeof(Degree)))
            {
                List1 selectList = new List1
                {
                    Text = value.ToString(),
                    Value = ((int)value).ToString(),

                };
                lists.Add(selectList);
            }
            return lists;
        }

答案 2 :(得分:2)

您可以创建一个实用程序函数来创建枚举的Hashtable。

public static class EnumUtil<T>
{
    public static Hashtable ToHashTable()
    {
        string[] names = Enum.GetNames(typeof(T));
        Array values = Enum.GetValues(typeof(T));
        Hashtable ht = new Hashtable();
        for (int i = 0; i < names.Length; i++)
            ht.Add(names[i], (int)values.GetValue(i));
        return ht;
    }
}

用法:

EnumUtil<Degree>.ToHashTable();