如何在不知道泛型的情况下获取泛型类(单例)中静态字段的值

时间:2018-11-21 17:20:16

标签: c# generics static instance getvalue

好吧,我尝试更好地解释我的问题:我有

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()之前是否可以通过这种通用类型获取静态字段的值。

1 个答案:

答案 0 :(得分:0)

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

相关问题