68 votes

fusionner deux objets en C#

J'ai un modèle d'objet MyObject avec diverses propriétés. À un moment donné, j'ai deux instances de ce MyObject : l'instance A et l'instance B. Je voudrais copier et remplacer les propriétés de l'instance A par celles de l'instance B si l'instance B a des valeurs non nulles.

Si je n'avais qu'une seule classe avec 3 propriétés, pas de problème, je pourrais facilement la coder en dur (c'est ce que j'ai commencé à faire). Mais j'ai en fait 12 modèles d'objets différents avec environ 10 propriétés chacun.

Quelle est la bonne façon de procéder ?

0voto

Yehia Amer Points 306

C'est la même chose que la réponse de @Bas, mais pour la fusion de deux objets. listes

public class Copycontents
{
    public static void Work<T>(IList<T> targetList, IList<T> sourceList, Func<T, int> selector)
    {
        var matchingPrimaryKey = targetList.Select(x => selector(x)).ToList();

        foreach (var thismatchingPrimaryKey in matchingPrimaryKey)
        {
            CopyValues<T>(targetList.Single(x => selector(x) == thismatchingPrimaryKey),
                sourceList.Single(x => selector(x) == thismatchingPrimaryKey));
        }
    }

    private static void CopyValues<T>(T target, T source)
    {
        Type t = typeof(T);

        var properties = t.GetProperties().Where(prop => prop.CanRead && prop.CanWrite);

        foreach (var prop in properties)
        {
            var value = prop.GetValue(source, null);
            if (value != null)
                prop.SetValue(target, value, null);
        }
    }
}

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