3

Enum 型が構築されていないジェネリック型内にネストされている場合、Enum メンバー値を取得するための標準メソッドが機能しないようです。「オープン型の配列を作成できません」という例外がスローされます。

私はこの問題の解決策をstackoverflowで見つけようとしました::しかし、これについてはまだ誰も書いていないようです.

失敗するメソッド:

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

  • FieldInfo.GetValue(Type enumType) :: も失敗するため、次のようなことに時間を無駄にしないでください。

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

問題の根本は次のとおりです。ネストされた列挙型は、親の型の「構築されていない型」機能を継承します。今では私には当たり前のように聞こえますが、あなたも私と同じように混乱するかもしれません。

解決策は、列挙 Type から Type を構築することです。

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

したがって、コードがすべてのケースで機能することを確認するには、これを input.GetValues() 呼び出しの前に挿入します。

このような投稿に必死だったので、これが誰かの役に立てば幸いです。

4

0 に答える 0