locked
parcourir toutes ces propriétes d'un object jusqu'au type primitives (feuille) RRS feed

  • Question

  • Bonjour,

    j'ai une structure comme sui t :

    class Categoy
    {
        public string _name;
        public SubCategoy SubCategoy;
        public OrderInComming orderInComming;
    }
    class SubCategoy
    {
        public string _name;
       
        public Product Product;
    }
    class SubCategoy
    {
        public string _name;
        public Product Product;
    }
        class Product
        {
            public string _name;
            public order order;
            public command command;
        }
        class order
        {
            public string _name;
        }
        class OrderInComming
        {
            public string _name;
        }
        class command
        {
            public string _name;
        }

    Je voudrai à partir d'une category , parcourir toutes ces propriétes jusqu'au type primitives (feuille)

    ex :

    Categoy c = new Categoy();
                   var x1 = c._name;
                   var x2 = c.SubCategoy._name;
                   var x4 = c.SubCategoy.Product.name;
                   var x5 = c.SubCategoy.Product.order._name;
                   var x6 = c.SubCategoy.Product.command._name;
                   var x7 = c.OrderInComming._name;

    -------

    jeudi 3 mai 2012 15:24

Réponses

Toutes les réponses

  • Et ?

    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    jeudi 3 mai 2012 15:40
  • Bonjour, Gophette,

    Ce n’est pas clair : quelle est votre question ?

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    vendredi 4 mai 2012 06:26
  • J'ai trouvé un truc du genre  (Exactement ce que je cherche ) mais j'ai une boucle infinie  :

    Une exception non gérée du type 'System.StackOverflowException' s'est produite dans Module inconnu.

    Assurez_vous que vous n'avez pas une boucle infine ou une récurrence infinie

     private void DoRecursive(Type type)
            {
                PropertyInfo[] pi = type.GetProperties();
                foreach (PropertyInfo p in pi)
                {
                  //  Traiment(p.Name);
                    if (p.PropertyType.IsClass && !p.PropertyType.IsValueType && !p.PropertyType.IsPrimitive
                    && p.PropertyType.FullName != "System.String")
                        DoRecursive(p.PropertyType);
                }
            }

    Category categ = new Category ();
               Type type = categ.GetType();
                DoRecursive(type);

    vendredi 4 mai 2012 07:56
  • Donc vous voulez découvrir "à la volée" les propriétés de vos objets.

    Sans vouloir esquiver la problématique, ne pas connaitre à l'avance quels sont les objets que l'on va manipuler est bizarroide.

    Je sais bien que c'est à la mode d'utiliser la reflexion & co, mais la plupart du temps, cela révèle une mauvaise approche (sans vouloir vous vexer ;-)).

    Donc avant de répondre, pouvez-vous nous expliquer pourquoi vous ne connaissez pas les objets que vous utiliser ?


    Richard Clark
    Consultant - Formateur .NET
    http://www.c2i.fr
    Depuis 1996: le 1er site .NET francophone

    vendredi 4 mai 2012 08:13
  • Bonjour, Gophette,

    Le code que vous avez fourni fonctionne sans souci pour votre exemple. En plus, notez que _name, SubCategory et orderInComming ne sont pas des propriétés dans votre cas, sont des membres de la classe Category, donc l’appel type.GetProperties() ne retourne pas ce que vous cherchez. Pour les définir comme propriétés publiques le plus simple est d’utiliser public string _name {get;set;}, par exemple. Finalement, je ne peux pas expliquer le message d’erreur, sauf si la hiérarchie de classes est beaucoup plus complique est vous avez un cycle dedans : par exemple une classe a une propriété du type Category est la récursivité commencée avec le type Category ne finira jamais.

    Bonne journée,

    Cipri


    Suivez MSDN sur Twitter   Suivez MSDN sur Facebook


    Ciprian DUDUIALA, MSFT  
    •Nous vous prions de considérer que dans le cadre de ce forum on n’offre pas de support technique et aucune garantie de la part de Microsoft ne peut être offerte.

    lundi 7 mai 2012 07:14