C #: передача типа enum в качестве аргумента - PullRequest
1 голос
/ 02 марта 2011

Я попытался преобразовать enum в общий список, используя следующий код

public static List<T> ToList<T>(Type t) where T : struct
{
    return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}

успешно выполнено.

и я попытался вызвать вышеупомянутый метод, используя следующий код

 enum Fruit
    {
        apple = 1,
        orange = 2,
        banana = 3
    };

    private List<Fruit> GetFruitList()
    {
        List<Fruit> allFruits = EnumHelper.ToList(Fruit);
        return allFruits;
    }

привело к следующей ошибке

Compiler Error Message: CS0118: 'default.Fruit' is a 'type' but is used like a 'variable'

Так что я уверен, как передать тип Enum в качестве аргумента.

Ответы [ 6 ]

8 голосов
/ 02 марта 2011
public static List<T> ToList<T>() where T : struct
{
    return Enum.GetValues(typeof(T)).Cast<T>().ToList();
}

enum Fruit
{
    apple = 1,
    orange = 2,
    banana = 3
};

private List<Fruit> GetFruitList()
{
    List<Fruit> allFruits = EnumHelper.ToList<Fruit>();
    return allFruits;
}
4 голосов
/ 02 марта 2011

почему бы просто не сделать это:

public static List<T> ToList<T>()
{     
    return Enum.GetValues(typeof(T)).Cast<T>().ToList(); 
} 
2 голосов
/ 02 марта 2011
List<Fruit> allFruits = EnumHelper.ToList<Fruit>(typeof(Fruit));
1 голос
/ 02 марта 2011

Используйте EnumHelper.ToList<Fruit>(typeof(Fruit));.Однако вы можете потерять параметр, объявить его как EnumHelper.ToList<T>() и использовать его EnumHelper.ToList<Fruit>().

1 голос
/ 02 марта 2011

Свободный аргумент Type t

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

0 голосов
/ 02 марта 2011

Чтобы передать Type в вашу функцию, вы должны использовать следующий синтаксис:

 EnumHelper.ToList(typeof(Fruit));
...