问题描述
我正在开发一个应用程序。词典,列表太多了。在此,我想清除静态字典的内容,这些列表以单词“ 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);
因为globalTestNos
和globalDict
是字段(不是属性)
要解决返回空数组的问题,请将全局静态变量更改为属性。像这样:
public static Dictionary<string,TestNo> globalDict { get; set; } = new Dictionary<string,TestNo>();
public static List<TestNo> globalTestNos { get; set; } = new List<TestNo>();
完成此操作后,您的原始代码将能够检测并返回类中包含单词global
的属性。