【发布时间】:2012-08-14 21:24:09
【问题描述】:
一开始,我们有这个基本的枚举。
public enum E_Levels {
[ValueOfEnum("Low level")]
LOW,
[ValueOfEnum("Normal level")]
NORMAL,
[ValueOfEnum("High level")]
HIGH
}
我想得到一个List<string> 无论枚举是什么。像Extensions.GetValuesOfEnum<E_Levels>() 这样的东西可以返回一个List<string>,其中包含“低级别”、“正常级别”和“高级别”。
StackOF 帮我获得了一个值属性:
public static class Extensions {
public static string ToValueOfEnum(this Enum value) {
FieldInfo fieldInfo = value.GetType().GetField(value.ToString());
ValueOfEnum[] attribs = fieldInfo.GetCustomAttributes(typeof(ValueOfEnum), false) as ValueOfEnum[];
return attribs.Length > 0 ? attribs[0].value : null;
}
}
无论枚举是什么,我都可以调用此方法:E_Levels.LOW.ToValueOfEnum()。
此外,StackOF 帮助我获得了一个特定枚举的List<string>。
我在控制器中制作了这个方法:
private List<string> GetLevels() {
List<string> levelsToReturn = new List<string>();
var levels = Enum.GetValues(typeof(E_Levels)).Cast<E_Levels>();
foreach(E_Levels l in levels)
levelsToReturn.Add(l.ToValueOfEnum());
return levelsToReturn;
}
但是这种方式需要我为每个枚举重写相同的方法。
所以我尝试将这个通用方法添加到我的类扩展中:
public static class Extensions {
public static string ToValueOfEnum(this Enum value) {...}
public static List<string> GetValuesOf<T>() {
List<string> levelsToReturn = new List<string>();
var levels = Enum.GetValues(typeof(T)).Cast<T>();
foreach(T l in levels)
levelsToReturn.Add(l.ToValueOfEnum());
return levelsToReturn;
}
}
但在我的 foreach 中,.ToValueOfEnum() 是一种未知方法。
所以我遇到了麻烦,我希望我能找到一种方法,不要一次又一次地为每个枚举重写相同的方法......
【问题讨论】:
标签: c# generics enums custom-attributes