using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Tools { public static class GenericsExtensions { #region Copier des propriétés communes à 2 classes différentes /// <summary> /// Retourner un nouvel objet de type U à partir des propriétés commune au type T /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="U"></typeparam> /// <param name="sender"></param> /// <returns></returns> public static U Copier<T, U>(this T sender) where U : new() { // Création d'une instance du type de retour U retour = new U(); // Copier les propriétés de l'orinal vers le retour sender.Copier<T, U>(retour); return retour; } /// <summary> /// Copie les propriétés du type U à partir des propriétés commune au type T /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="U"></typeparam> /// <param name="sender"></param> /// <param name="retour"></param> public static void Copier<T, U>(this T sender,U retour) { var req = ( // Selection des properties de l'objet original from s in typeof(T).GetProperties() // Selection des properties de l'objet de retour from r in typeof(U).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); } } } /// <summary> /// Retourner un nouveau tableau d'objet de type U à partir des propriétés commune au tableau du type T /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="U"></typeparam> /// <param name="sender"></param> /// <returns></returns> public static U[] Copier<T, U>(this T[] sender) where U : new() { // Création d'une instance du type de retour U[] retour = new U[sender.Length]; for (Int32 i = 0; i < sender.Length; i++) { retour[i] = new U(); } // Copier les propriétés de l'orinal vers le retour sender.Copier<T, U>(retour); return retour; } /// <summary> /// Copie les propriétés du tableau de type U à partir des propriétés commune au tableau du type T /// </summary> /// <typeparam name="T"></typeparam> /// <typeparam name="U"></typeparam> /// <param name="sender"></param> /// <param name="retour"></param> public static void Copier<T, U>(this T[] sender, U[] retour) { var req = ( // Selection des properties de l'objet original from s in typeof(T).GetProperties() // Selection des properties de l'objet de retour from r in typeof(U).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 < sender.Length; i++) { for (Int32 j = 0; j < req.Length; j++) { // req[j].r.SetValue( retour[i], req[j].s.GetValue(sender[i], null), null); } } } } #endregion } }
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.