Отражение неправильно отображает статические свойства

У меня есть класс псевдоперечисления, который состоит из защищенного конструктора и списка статических свойств только для чтения:

public class Column
{   
    protected Column(string name)
    {
      columnName = name;
    }

    public readonly string columnName;

    public static readonly Column UNDEFINED = new Column("");
    public static readonly Column Test = new Column("Test");

    /// and so on
}

Я хочу получить доступ к отдельным экземплярам по их строковому имени, но по какой-то причине отражение вообще не возвращает статические свойства:

введите здесь описание изображения

На приведенном выше изображении вы можете видеть, что свойство существует и имеет ненулевое значение, но если я запрашиваю его с помощью отражения, я получаю null.

Если я попытаюсь запросить список свойств, я получу пустой массив:

            PropertyInfo[] props = typeof(Column).GetProperties(BindingFlags.Static);
            if (props.Length == 0)
            {
                // This exception triggers
                throw new Exception("Where the hell are all the properties???");
            }

Что я делаю не так?


person Tomáš Zato - Reinstate Monica    schedule 23.04.2018    source источник
comment
Вы не публикуете определение ASDU, но Column.Undefined и Column.Test являются статическими полями, а не свойствами. Посмотрите на Type.GetField :)   -  person gnud    schedule 24.04.2018
comment
Я не понимал, что есть разница между свойством и полем. Спасибо!   -  person Tomáš Zato - Reinstate Monica    schedule 24.04.2018


Ответы (1)


Вы пытаетесь получить доступ к полям, а не свойствам.

Измените код отражения на это:

        FieldInfo[] fields = typeof(Column).GetFields();
        if (fields.Length == 0)
        {
            // This exception no longer triggers
            throw new Exception("Where the hell are all the properties???");
        } else
        {
            foreach (var field in fields)
            {
                Console.WriteLine(field.Name);
            }
        }
person Espen    schedule 23.04.2018