微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决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的属性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。