Получить List моих атрибутов перечисления с помощью универсального метода

В начале у нас есть это основное перечисление.

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

Но этот способ требует, чтобы я переписал один и тот же метод для каждого перечисления.
Поэтому я попытался добавить этот общий метод в свой класс 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()— неизвестный метод.

Итак, у меня проблемы, я надеялся, что смогу найти способ не переписывать снова и снова один и тот же метод для каждого перечисления...

5
задан Darin Dimitrov 18 August 2012 в 22:11
поделиться