如何使用反射从另一个类获取静态字段?

时间:2018-08-17 16:10:44

标签: c# reflection static

我们有一个名为VisualizationSettings的静态类,它有约20个我们制作的名为VisualizationSetting的结构实例(单数)。

我想让另一个类从VisualizationSetting中提取VisualizationSettings的所有单个实例,并对其进行修改。

我向VisualizationSettings添加了一个方法,该方法应获取并返回VisualizationSetting的所有实例,如下所示:

    public static FieldInfo[] GetFields(){
        Type myType = typeof(VisualizationSetting);
        FieldInfo[] myField = myType.GetFields();
        return myField;
    }

然后,在另一堂课中,我访问此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);
    }

但是我在VisualizationSetting value = (VisualizationSetting)setting.GetValue(null);行上遇到一个错误,说TargetException: Non-static field requires a target

我的困惑是,据我所知,设置应该是静态的,因为VisualizationSettings是静态类。这里有我想念的东西吗?

1 个答案:

答案 0 :(得分:0)

您从错误的类中获取了字段。
您应该遍历VisualizationSettings而不是VisualizationSetting的字段。

public static FieldInfo[] GetFields(){
    Type myType = typeof(VisualizationSettings); // <-- the change is here
    FieldInfo[] myField = myType.GetFields();
    return myField;
}