C # Отражение и получение свойств - PullRequest
15 голосов
/ 04 мая 2010

У меня есть следующая фиктивная структура класса, и я пытаюсь выяснить, как получить свойства из каждого экземпляра класса People в PeopleList. Я знаю, как получить свойства из одного экземпляра People, но не могу понять, как получить его из PeopleList. Я уверен, что это действительно просто, но кто-то может указать мне правильное направление?

public class Example
{
    public class People
    {
        private string _name;
        public string Name
        {
            get { return _name; }
            set { _name = value; }
        }

        private int _age;
        public int Age
        {
            get { return _age; }
            set { _age = value; }
        }

        public People()
        {

        }

        public People(string name, int age)
        {
            this._name = name;
            this._age = age;
        }
    }

    public class PeopleList : List<People>
    {
        public static void DoStuff()
        {
             PeopleList newList = new PeopleList();

            // Do some stuff

             newList.Add(new People("Tim", 35));
        }
    }        
}

1 Ответ

29 голосов
/ 04 мая 2010

Все еще не на 100% уверен в том, что вы хотите, но этот небольшой фрагмент кода (не проверенный) может привести вас на правильный путь (или, по крайней мере, помочь уточнить, что вы хотите).

void ReportValue(String propName, Object propValue);

void ReadList<T>(List<T> list)
{
  var props = typeof(T).GetProperties();
  foreach(T item in list)
  {
    foreach(var prop in props)
    {
      ReportValue(prop.Name, prop.GetValue(item));
    }
  }
}

c # должен иметь возможность определить, что PeopleList наследуется от List, и обрабатывать это нормально, но если вам нужно иметь PeopleList в качестве универсального типа, то это должно работать:

void ReadList<T>(T list) where T : System.Collections.IList
{
  foreach (Object item in list)
  {
    var props = item.GetType().GetProperties();
    foreach (var prop in props)
    {
      ReportValue(prop.Name, prop.GetValue(item, null));
    }
  }
}

Обратите внимание, что при этом также будут обрабатываться свойства в производных типах в списке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...