ジェネリック クラス内の静的フィールドからジェネリック型のインスタンス値を取得しようとしていますが、次の例外がスローされます。
Type.ContainsGenericParameters が true である型のフィールドに対してレイト バインド操作を実行することはできません
public class ManagerTemplate<Q, T> : IObjectManager
where T : Filmation.Runtime.Engine.ObjectId, new( )
where Q : ManagerTemplate<Q, T>, new( ) {
public readonly static Q Instance = new Q( ); <---- STATIC FIELD
}
private static void FindManagers( ) {
var IObjectManagerType = typeof( IObjectManager );
var managers = IObjectManagerType.Assembly
.GetTypes( )
.Where( t => !t.IsAbstract && t.GetInterfaces().Any( i => i == IObjectManagerType) );
foreach (var manager in managers) {
var fi = manager.GetField( "Instance" );
var instance = fi.GetValue( null ); <--- EXCEPTION
}
}
GetGenericTypeDefinition を使用しようとしましたが、引き続き例外がスローされます。
Googleで検索しましたが、それを行う方法が見つかりませんでした...
誰でもそれができる方法を知っていますか?
編集:静的プロパティを使用して同じ
これは私が実装した回避策です(ただし、リフレクションを使用して実行できるかどうかを知りたいです):
public static Q Instance { get; private set; }
static ManagerTemplate( ) {
Instance = new Q( );
Environment.Managers.Add( Instance );
}