3

似乎 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() 调用之前插入它。

我希望这对某人有所帮助,因为我迫切需要这样的帖子。

4

0 回答 0