简体   繁体   English

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM