枚举类型中的Enum.GetValues()嵌套在未构造的泛型类型中

时间:2013-10-20 18:21:49

标签: c# generics reflection enums nested

似乎Enum成员值检索的标准方法在源枚举枚举类型嵌套在未构造的泛型类型中时不起作用:         它会抛出异常“无法生成打开类型的数组”。

我试图在stackoverflow ::这里找到解决这个问题的方法但是,似乎还没有人写过这个 - 所以我分享了我在浪费了一些痛苦的时间后发现的解决方案。

失败的方法:

  • Enum.GetValues()
  • Type.GetEnumValues()

  • FieldInfo.GetValue(Type enumType):: 也会失败,所以不要把时间浪费在这样的事情上:

    MemberInfo [] enumMembers = input.GetMembers()。Where(x =>(x.MemberType == MemberTypes.Field))。ToArray();

问题的根源是:嵌套枚举类型继承父类型的“未构造类型”功能。现在这听起来很明显 - 但你可能会像我一样陷入同样的​​困惑。

解决方案是从枚举类型构造一个Type。

if (input.IsGenericTypeDefinition)
{
var genericInput = input.MakeGenericType(new Type[] { typeof(imbProjectResource) });
input = genericInput;
}

因此,为了确保您的代码在所有情况下都能正常工作 - 在input.GetValues()调用之前插入它。

我希望这对某人有所帮助,因为我非常渴望得到这样的帖子。

0 个答案:

没有答案
相关问题