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.PropertyTypeselect 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>();