我有一个泛型类和静态字段。
public class SomeGenericClass<T> : ISomeInterface<T> where T : SomeClass
{
public static ISomeInterface<T> _someField;
}
当我想要更改此字段的值时,我必须为每个类型更改它
var value = ...;
SomeGenericClass<Type1>._someField = value;
SomeGenericClass<Type2>._someField = value;
// ...
SomeGenericClass<Type3>._someField = value;
如果我有类型数组,是否可以将其设置为循环?我希望看到像这样的东西
Type[] types = ... //Array of types
foreach(type in types){
SomeGenericClass<type>._someField = value;
}
或类似的东西。
答案 0 :(得分:1)
你可以通过反思来做到这一点。首先得到实际类型:
var type = typeof(SomeGenericClass<>).MakeGenericType(theTypeArgument);
现在,您可以在该类型上调用GetField
以获取字段:
var field = type.GetField("_someField");
接下来设置值。请注意,传递给SetValue
的第一个参数是null
,因为该字段为static
:
field.SetValue(null, value);
最后将其包装成循环,例如:
foreach(var t in types)
{
var type = typeof(SomeGenericClass<>).MakeGenericType(t);
var field = type.GetField("_someField");
field.SetValue(null, value);
}
当然,您还应添加一些检查以避免NullReferenceException
。