如何按enum绑定列表

本文关键字:列表 绑定 enum 何按 | 更新日期: 2023-09-27 18:17:47

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

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

如何映射?

如何按enum绑定列表

这是一个很好很简单的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();

这显然也可以变成一个扩展方法。

更多信息请参见:
枚举。getvalue
枚举。getname
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的答案。

试试这个:

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

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

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