如何获得Nullable <Enum>的类型?

dev*_*ife 8 c#

你怎么能在C#中做类似的事情?

Type _nullableEnumType = typeof(Enum?);
Run Code Online (Sandbox Code Playgroud)

我想一个更好的问题是,当你能做到这一点时,为什么你不能这样做:

Type _nullableDecimalType = typeof(decimal?);
Run Code Online (Sandbox Code Playgroud)

Mar*_*ell 15

Enum是不是一个枚举 -它是基类为枚举,并且是参考型(即,class).这意味着这Enum?是非法的,因为Nullable<T>有限制T : struct,并且Enum不满足.

所以:要么使用typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime),要么更简单,typeof(EnumTypeKnownAtCompileTime?)

您可能还需要注意:

Enum x = {some value};
Run Code Online (Sandbox Code Playgroud)

是一个装箱操作,所以你通常应该避免使用Enum作为参数等.