如何获得Enum的所有值?

Gra*_*ton 6 c# enums

我想创建一个接受一个Enum类型的方法,并返回它在数组中的所有成员,如何创建这样的函数?

举个例子,我有这两个枚举:

public enum Family
{ 
   Brother,
   Sister,
   Father
}

public enum CarType
{ 
   Volkswagen,
   Ferrari,
   BMW
}
Run Code Online (Sandbox Code Playgroud)

如何创建一个函数GetEnumList以使其返回

  1. {Family.Brother, Family.Sister, Family.Father} 对于第一种情况.
  2. {CarType.Volkswagen, CarType.Ferrari, CarType.BMW} 对于第二种情况.

我试过了 :

private static List<T> GetEnumList<T>()
{
    var enumList = Enum.GetValues(typeof(T))
        .Cast<T>().ToList();
    return enumList;
}
Run Code Online (Sandbox Code Playgroud)

但我有一个InvalidOperationException:

System.InvalidOperationException:无法对ContainsGenericParameters为true的类型或方法执行后期绑定操作.在System.Reflection.RuntimeMethodInfo.ThrowNoInvokeException()在System.Reflection.RuntimeMethodInfo.Invoke在System.Reflection.RuntimeMethodInfo.Invoke(对象OBJ,的BindingFlags invokeAttr,粘结剂粘结剂,对象[]参数,CultureInfo的文化,布尔skipVisibilityChecks)(对象物OBJ ,BindingFlags invokeAttr,Binder binder,Object []参数,CultureInfo文化)在System.Reflection.MethodBase.Invoke(Object obj,Object []参数)

编辑:上面的代码工作正常 - 我得到一个例外的原因是因为分析器导致我的错误.谢谢大家的解决方案.

Hom*_*001 16

这是完整的代码:

    public enum Family
    {
        Brother,
        Sister,
        Father
    }

    public enum CarType
    {
        Volkswagen,
        Ferrari,
        BMW
    }


    static void Main(string[] args)
    {
        Console.WriteLine(GetEnumList<Family>());
        Console.WriteLine(GetEnumList<Family>().First());
        Console.ReadKey();
    }

    private static List<T> GetEnumList<T>()
    {
        T[] array = (T[])Enum.GetValues(typeof(T));
        List<T> list = new List<T>(array);
        return list;
    }
Run Code Online (Sandbox Code Playgroud)


ror*_*.ap 9

与其他答案相同,但针对现代 C# 进行了更新:

public static List<TEnum> GetEnumList<TEnum>() where TEnum : Enum 
    => ((TEnum[])Enum.GetValues(typeof(TEnum))).ToList();
Run Code Online (Sandbox Code Playgroud)

  • “现代”是非常短暂的。.Net core 5 有 `Enum.GetValues&lt;TEnum&gt;()`。 (7认同)

Hom*_*001 7

(Family[])Enum.GetValues(typeof(Family))
Run Code Online (Sandbox Code Playgroud)


JP *_*oto 5

像这样?

private static List<string> GetEnumList<T>()
{
    return Enum.GetNames( typeof( T ) )
           .Select(s => typeof(T).Name + "." + s).ToList();
}
Run Code Online (Sandbox Code Playgroud)