I'm trying to loop through some static properties in a simple static class in order to populate a combo box with their values, but am having difficulties.
Here is the simple class:
public static MyStaticClass()
{
public static string property1 = "NumberOne";
public static string property2 = "NumberTwo";
public static string property3 = "NumberThree";
}
... and the code attempting to retrieve the values:
Type myType = typeof(MyStaticClass);
PropertyInfo[] properties = myType.GetProperties(
BindingFlags.Public | BindingFlags.Static | BindingFlags.DeclaredOnly);
foreach (PropertyInfo property in properties)
{
MyComboBox.Items.Add(property.GetValue(myType, null).ToString());
}
If I don't supply any binding flags then I get about 57 properties including things like System.Reflection.Module Module and all sorts of other inherited things I don't care about. My 3 declared properties are not present.
If I supply various combinations of other flags then it always returns 0 properties. Great.
Does it matter that my static class is actually declared within another non-static class?
What am I doing wrong?
The problem is that
property1..3
are not properties, but fields.To make them properties change them to:
Or use auto properties and initialize their values in the static constructor of the class:
...or use
myType.GetFields(...)
if fields are what you want to use.Try removing
BindingFlags.DeclaredOnly
, because according to MSDN:Since static's cannot be inherited, this might be causing your issues. Also I noticed the fields you are trying to get are not properties. So try using