C# - Get values of static properties from static class

39,873

Solution 1

The problem is that property1..3 are not properties, but fields.

To make them properties change them to:

private static string _property1 = "NumberOne";
public static string property1
{
  get { return _property1; }
  set { _property1 = value; }
}

Or use auto properties and initialize their values in the static constructor of the class:

public static string property1 { get; set; }

static MyStaticClass()
{
  property1 = "NumberOne";
}

...or use myType.GetFields(...) if fields are what you want to use.

Solution 2

Try removing BindingFlags.DeclaredOnly, because according to MSDN:

Specifies that only members declared at the level of the supplied type's hierarchy should be considered. Inherited members are not considered.

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

type.GetFields(...)
Share:
39,873
JamesW
Author by

JamesW

Updated on April 19, 2020

Comments

  • JamesW
    JamesW about 4 years

    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?

  • Dan Csharpster
    Dan Csharpster over 9 years
    I'm using something like: var type = new Foo().GetType(); var value = type.GetField("Field1").GetValue(new Foo()); Console.WriteLine(value); Does that seem okay?