CodeGo.net>如何获取一个类的静态变量

问题描述

我正在开发一个应用程序。词典,列表太多了。在此,我想清除静态字典的内容,这些列表以单词“ global”开头。这是示例代码

    public static Dictionary<string,TestNo> globalDict = new Dictionary<string,TestNo>();
    public static List<TestNo> globalTestNos= new List<TestNo>(); 
    public Form1()
    {
        InitializeComponent();
        globalDict.Add("a",1);
        globalDict.Add("b",2);
        globalDict.Add("c",3);
    }
    private void button1_Click(object sender,EventArgs e)
    {
        // Get the type of 'MyClass'.
        Type myType = this.GetType();

        PropertyInfo[] propertyInfo = myType.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public |
            BindingFlags.Static);
        List<string> temp = propertyInfo.Where(x => x.Name.Contains("global")).Select(x => x.Name).ToList();
        MessageBox.Show(String.Join(Environment.NewLine,temp.ToArray()));
    }

但是它不起作用。我总是将propertyInfo作为空数组。有人可以指导我吗?

注意:我正在使用.net3.5。 Visual express2008。这是公司提供的,所以我不能更改平台。

解决方法

PropertyInfo[] propertyInfo = myType.GetProperties(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);

应更改为

FieldInfo[] fieldInfos = myType.GetFields(BindingFlags.FlattenHierarchy | BindingFlags.Public | BindingFlags.Static);

因为globalTestNosglobalDict是字段(不是属性)

,

要解决返回空数组的问题,请将全局静态变量更改为属性。像这样:

public static Dictionary<string,TestNo> globalDict { get; set; } = new Dictionary<string,TestNo>();
public static List<TestNo> globalTestNos { get; set; } = new List<TestNo>();

完成此操作后,您的原始代码将能够检测并返回类中包含单词global的属性。