0 votes

Création de tous les objets en utilisant la réflexion des propriétés d'un objet !

Ok, voici le scénario ! J'ai un objet Personne qui a un objet Adresse. La personne a une liste d'adresses.

Maintenant, je veux itérer à travers les propriétés de la personne et quand j'arrive à une liste, je veux créer un objet de l'objet Adresse. Comment puis-je faire cela ?

Mise à jour :

public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }

        private List<Address> _addresses = new List<Address>(); 

        public void AddAddress(Address address)
        {
            _addresses.Add(address);
            address.Person = this; 
        }

        public List<Address> Addresses  
        {
            get { return _addresses; }
            set { _addresses = value; }
        }
    }
 var properties = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance); 
            foreach(var property in properties)
            {
                var propertyType = property.PropertyType;

                if (!propertyType.IsGenericType) continue;

                var obj = Activator.CreateInstance(propertyType);

                var genericType = obj.GetType().GetGenericTypeDefinition(); 

                Console.WriteLine(obj.GetType().Name);

                var type = property.GetType(); 
            }

Le code de réflexion ci-dessus me renvoie une liste mais elle est de type Liste. Je veux le type générique qui est adresse.

0voto

Stan R. Points 8967

Tony, si tu as accès à la classe d'adresse, tu peux simplement faire ça.

 var properties = item.GetType().GetProperties(BindingFlags.Public | BindingFlags.Instance);
            List<Address> retVal;
            foreach (var property in properties)
            {
                var propertyType = property.PropertyType;
                if (!propertyType.IsGenericType) continue;

                retVal = property.GetValue(item, new object[] { }) as List<Address>;

                if (retVal != null)
                    break;
            }

            //now you have your List<Address> in retVal

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