如何在C#中执行以下操作?
Type _nullableEnumType = typeof(Enum?);
我想一个更好的问题是,当你能做到这一点时,为什么不能这样做:
Type _nullableDecimalType = typeof(decimal?);
答案 0 :(得分:14)
Enum
不是枚举 - 它是枚举的基类,并且是引用类型(即class
)。这意味着Enum?
是非法的,因为Nullable<T>
的限制为T : struct
,而Enum
不符合此限制。
所以:要么使用typeof(Nullable<>).MakeGenericType(enumTypeKnownAtRuntime)
,要么更简单地使用typeof(EnumTypeKnownAtCompileTime?)
您可能还需要注意:
Enum x = {some value};
是装箱操作 ,因此您通常应避免使用Enum
作为参数等。