23 votes

C# Réflexion et Obtention de Propriétés

J'ai la structure de classe factice suivante et j'essaie de trouver comment obtenir les propriétés de chaque instance de la classe People dans PeopleList. Je sais comment obtenir les propriétés d'une seule instance de People mais je n'arrive absolument pas à comprendre comment les obtenir de PeopleList. Je suis sûr que c'est vraiment simple mais quelqu'un pourrait-il me mettre sur la bonne voie?

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
    {
        public static void DoStuff()
        {
             PeopleList newList = new PeopleList();

            // Faire quelque chose

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

41voto

Grant Peters Points 3718

Encore pas sûr à 100% de ce que vous voulez, mais ce petit bout de code rapide (non testé) pourrait vous mettre sur la bonne voie (ou du moins aider à clarifier ce que vous voulez).

void ReportValue(String propName, Object propValue);

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

Le langage c# devrait être capable de comprendre que 'PeopleList' hérite de 'List' et gérer cela correctement, mais si vous avez besoin d'avoir 'PeopleList' comme type générique, alors cela devrait fonctionner :

void ReadList(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));
    }
  }
}

Remarquez que cela traitera en fait aussi les propriétés des types dérivés dans la liste.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X