1

好的,我试着更好地解释我的问题:我有一个

class DynamicTypeCreator{...}

以及其中的一个方法:

static BuildASingletonClassWithTypeBuiler<T> (T object) {...}

该方法不仅创建了单例类型

class Singleton01<K> {...}

但也实例化它,定义字段

static Singleton01<K> instance = new Singleton01<K> (K object)

和另一个领域

static Type typeOfGenericParameter = typeof(K).

( https://github.com/TThaan/ExtensionPropertiesForCSharp上的实际代码是不同的,但这应该是无关紧要的。)
但是,此方法不返回单例类型或实例。它只是在创造它们。
事实上,很多时候,只是将类型的名称从 Singleton01 更改为 Singleton02、Singleton03 等,并且每次都使用不同T object的参数。
因此,当我以后想访问其中一个单例时,我不知道它拥有什么对象以及它是什么类型。要获取例如“Singleton03”中任何静态字段的值,我首先使用

Type type = AssemblyBuilder.GetType("Singleton03").

现在尝试获取静态字段的值还行不通,它只是空值。我似乎被迫使用

Type genericType = type.MakeGenericType(new[] { typeof(T) }).

但要让它工作,我已经需要知道我的参数类型T object
我想知道在使用.MakeGeneric().

4

1 回答 1

0

我现在找到了答案。
由于一种类型的泛型类实际上是与另一种类型的“相同类”不同的类,因此其中一个类中的静态字段与另一个类中
的静态字段不同。.MakeGeneric()因此,在使用拟合类型之前,我无法获得其中一个字段的值。
解决方案是更改我的类的创建,例如这里: 通用类和静态字段

于 2018-11-24T18:57:32.120 回答