我试图从泛型类中的静态字段中获取泛型类型的实例值,它抛出了这个异常:
不能对 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,但继续抛出异常。
我在谷歌搜索过,但我没有找到它是如何完成的......
有谁知道怎么做?
编辑:使用静态属性相同
这是我已经实现的解决方法,(尽管我想知道是否可以使用反射来完成):
public static Q Instance { get; private set; }
static ManagerTemplate( ) {
Instance = new Q( );
Environment.Managers.Add( Instance );
}