如何在不知道泛型类型的情况下获取泛型class(单例)中静态字段的值
How to get the value of a static field in a generic class (singleton) without knowing the generic type
好的,我试着更好地解释我的问题:我有一个
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 上的实际代码不同,但不必担心。)
但是,此方法不 return 单例类型或实例。它只是在创造它们。
事实上,很多时候只是将类型的名称从 Singleton01 更改为 Singleton02、Singleton03 等,并且每次都使用不同的 T object
作为参数。
因此,当我稍后想访问其中一个单例时,我不知道它拥有什么对象以及它是什么类型。要获取例如 "Singleton03" 中任何静态字段的值,我首先使用
Type type = AssemblyBuilder.GetType("Singleton03")
。
现在尝试获取静态字段的值还行不通,它只是空值。我似乎被迫使用
Type genericType = type.MakeGenericType(new[] { typeof(T) })
。
但是为了让它工作,我已经需要知道我的参数类型 T object
。
我想知道在使用 .MakeGeneric()
.
之前是否有办法获取这种泛型类型的静态字段的值
我现在找到了答案。
由于一种类型的泛型 class 实际上是另一种类型的 class 然后 "the same class",
其中一个 classes 中的静态字段与另一个 class 中的静态字段不同。因此,在将 .MakeGeneric()
与配件类型一起使用之前,我无法获得这些字段之一的值。
解决方案是更改我的 class 的创建,例如:
Generic classes and static fields.
好的,我试着更好地解释我的问题:我有一个
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 上的实际代码不同,但不必担心。)
但是,此方法不 return 单例类型或实例。它只是在创造它们。
事实上,很多时候只是将类型的名称从 Singleton01 更改为 Singleton02、Singleton03 等,并且每次都使用不同的 T object
作为参数。
因此,当我稍后想访问其中一个单例时,我不知道它拥有什么对象以及它是什么类型。要获取例如 "Singleton03" 中任何静态字段的值,我首先使用
Type type = AssemblyBuilder.GetType("Singleton03")
。
现在尝试获取静态字段的值还行不通,它只是空值。我似乎被迫使用
Type genericType = type.MakeGenericType(new[] { typeof(T) })
。
但是为了让它工作,我已经需要知道我的参数类型 T object
。
我想知道在使用 .MakeGeneric()
.
我现在找到了答案。
由于一种类型的泛型 class 实际上是另一种类型的 class 然后 "the same class",
其中一个 classes 中的静态字段与另一个 class 中的静态字段不同。因此,在将 .MakeGeneric()
与配件类型一起使用之前,我无法获得这些字段之一的值。
解决方案是更改我的 class 的创建,例如:
Generic classes and static fields.