最初に、この基本的な列挙型があります。
public enum E_Levels {
[ValueOfEnum("Low level")]
LOW,
[ValueOfEnum("Normal level")]
NORMAL,
[ValueOfEnum("High level")]
HIGH
}
List<string>
そして、列挙型は何でも取得したいと思います。「低レベル」、「通常レベル」、「高レベル」がExtensions.GetValuesOfEnum<E_Levels>()
含まれるaを返すようなもの。List<string>
StackOFは、1つの値属性を取得するのに役立ちました。
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;
}
ただし、この方法では、列挙型ごとに同じメソッドを書き直す必要があります。
だから私はこのジェネリックメソッドを私のクラスExtensionsに追加しようとしました:
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()
これは未知の方法です。
だから私は困っています、私は私が各列挙型に対して同じ方法を何度も何度も書き直さない方法を見つけることができることを望みました...