Как мне автоматически отображать все свойства класса, который является свойством другого класса?

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

public class ClassA
{
    public double PropA = 5;
    private PropertyInfo[] _PropertyInfos = null;
    public void Print()
    {
        if (_PropertyInfos == null)
            _PropertyInfos = this.GetType().GetProperties();

        foreach (var info in _PropertyInfos)
        {
            Console.WriteLine(info.Name + ": " + info.GetValue(this).ToString());
        }
    }
}

public class ClassB
{
    public ClassA PropB = new ClassA();
}

class Program
{
    static void Main(string[] args)
    {
        ClassB classB = new ClassB();

        classB.PropB.Print();
    }
}

По какой-то причине _PropertyInfos всегда недействителен, поэтому он пропускает весь цикл. Что я делаю не так?

1 ответ

Решение

ClassA не имеет свойств, только поля.

public double PropA = 5;          // Field
public double PropA { get; set; } // Property

_PropertyInfos не null, оно пустое.

Либо преобразуйте свои поля в свойства, либо начните использовать this.GetType().GetFields() обмен PropertyInfo[] за FieldInfo[].

Другие вопросы по тегам