我试图用枚举绑定一个列表。枚举具有以下值
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;}
}
如何映射?
答案 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();