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() 呼び出しの前に挿入します。
このような投稿に必死だったので、これが誰かの役に立てば幸いです。