[英]How to get static fields from another class using reflection?
We have a static class called VisualizationSettings
that has ~20 instances of a struct we made called VisualizationSetting
(singular). 我们有一个名为
VisualizationSettings
的静态类,该类具有约20个我们制作的名为VisualizationSetting
(单数)的结构实例。
I want to have another class pull in all the individual instances of VisualizationSetting
from VisualizationSettings
, and modify them. 我想让另一个类从
VisualizationSettings
拉入VisualizationSetting
所有单个实例,并对其进行修改。
I added a method to VisualizationSettings
that should get and return all instances of VisualizationSetting
, like so: 我向
VisualizationSettings
添加了一个方法,该方法应获取并返回VisualizationSetting
所有实例,如下所示:
public static FieldInfo[] GetFields(){
Type myType = typeof(VisualizationSetting);
FieldInfo[] myField = myType.GetFields();
return myField;
}
Then, in my other class, I access this FieldInfo[]
, iterate through it, and modify it, like so: 然后,在另一个类中,我访问此
FieldInfo[]
,对其进行迭代,然后对其进行修改,如下所示:
FieldInfo[] myField = VisualizationSettings.GetFields();
foreach (FieldInfo setting in myField) {
VisualizationSetting value = (VisualizationSetting)setting.GetValue(null);
/* A bunch of stuff to modify value */
setting.SetValue(null, value);
}
However I get an error on the line VisualizationSetting value = (VisualizationSetting)setting.GetValue(null);
但是我在
VisualizationSetting value = (VisualizationSetting)setting.GetValue(null);
行上遇到错误VisualizationSetting value = (VisualizationSetting)setting.GetValue(null);
saying TargetException: Non-static field requires a target
说
TargetException: Non-static field requires a target
My confusion is that as far as I'm aware, setting should static, since VisualizationSettings
is a static class. 我的困惑是,据我所知,设置应该是静态的,因为
VisualizationSettings
是静态类。 Is there something I'm missing here? 我在这里想念什么吗?
You are getting the fields from the wrong class. 您从错误的类中获取字段。
You should iterate through the fields of VisualizationSettings
not VisualizationSetting
. 您应该遍历
VisualizationSettings
而不是VisualizationSetting
的字段。
public static FieldInfo[] GetFields(){
Type myType = typeof(VisualizationSettings); // <-- the change is here
FieldInfo[] myField = myType.GetFields();
return myField;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.