似乎 Enum 成员值检索的标准方法在原始 Enum 类型嵌套在未构造的泛型类型中时不起作用:它抛出异常“无法创建开放类型的数组”。
我试图在 stackoverflow :: 上找到这个问题的解决方案:但是,似乎还没有人写过这个 - 因此我分享了我在浪费了一些痛苦的时间后发现的解决方案。
会失败的方法:
- 枚举.GetValues()
Type.GetEnumValues()
FieldInfo.GetValue(Type enumType) :: 也会失败,所以不要把时间浪费在这样的事情上:
MemberInfo[] enumMembers = input.GetMembers().Where(x => (x.MemberType == MemberTypes.Field)).ToArray();
问题的根源是:嵌套枚举类型继承了父类型的“非构造类型”特性。现在这对我来说听起来很明显 - 但你可能会像我一样陷入同样的困惑。
解决方案是从枚举类型构造一个类型。
if (input.IsGenericTypeDefinition)
{
var genericInput = input.MakeGenericType(new Type[] { typeof(imbProjectResource) });
input = genericInput;
}
因此,为了确保您的代码在所有情况下都能正常工作 - 在 input.GetValues() 调用之前插入它。
我希望这对某人有所帮助,因为我迫切需要这样的帖子。