CSharp 枚举通过可为空的枚举

s k*_*s k 4 c# enums

一段代码值一千字……

public enum enTest { a, b, c }

public void PrintEnum<T>()
{
    foreach (var E in Enum.GetValues(typeof(T)))
    Debug.WriteLine(E.ToString());
}

PrintEnum<enTest>();
PrintEnum<enTest?>();    // This will cause failure in Enum.GetValues()
Run Code Online (Sandbox Code Playgroud)

上面从一个更大的问题简化来说明失败。

有谁知道当有人传递给我一个 Nullable Enum 时,我如何遍历(或获取所有值)?

提前致谢。

Dan*_*ars 5

这个怎么样?

public static void PrintEnum<T>()
        {
            Type t = typeof (T);
            if (t.IsGenericType)
            {
                //Assume it's a nullable enum
                t = typeof (T).GenericTypeArguments[0];
            }

            foreach (var E in Enum.GetValues(t))
                Console.WriteLine(E.ToString());
        }
Run Code Online (Sandbox Code Playgroud)

  • Me.Name 的 Enum.GetValues(Nullable.GetUnderlyingType(typeof(T)) ?? typeof(T)) 好多了。 (3认同)