Clone un objet A vers un objet B

Publié le 29 août 2008 par Jeremy.jeanson

Voici un petite méthode d' extension qui montre comment Linq peut être utile pour copier rapidement les propriétés d' un objet dans un autre de type différent.

Seules les propriétés sont copiée.

public static U Clone<T, U>(this T sender)
{
   U retour = Activator.CreateInstance<U>();

   var req = (
   // Selection des properties de l'objet à copier
   from s in sender.GetType().GetProperties()

   // Selection des properties de l'objet de retour
   from r in retour.GetType().GetProperties()

   // Jointure des properties
   where r.Name == s.Name & r.PropertyType == s.PropertyType

   select new { r, s })

   .ToArray();

   // Test si on a bien des donnée
   if (req != null
   & req.Length > 0)
   {
   for (Int32 i = 0; i < req.Length; i++)
   {
   req[i].r.SetValue(
   retour,
   req[i].s.GetValue(sender, null),
   null);
   }
   }

   return retour;
}

Et pour l' utiliser

class2 b = a.Clone<class1, class2>();