скопировать объект в другой объект, но только с теми же полями - PullRequest
1 голос
/ 06 апреля 2010

Я хотел бы скопировать один объект в другой объект, а поля с одинаковыми именами и типами копировать Возможно, используя отражения.

, например

object1.Name = object2.Name; object1.Age = object2.Age;

Однако, если object2.Address не находится в object1, он будет проигнорирован и наоборот.

Ответы [ 2 ]

5 голосов
/ 07 апреля 2010

Я ответил на аналогичный вопрос здесь . Разница в том, что вы хотите, чтобы from и to имели разные типы и соответствовали свойствам по имени и по типу. Это не так уж сложно.

Я не проверял это - но попробуйте

public static class ExtensionMethods
{
    public static void CopyPropertiesTo<T, U>(this T source, U dest)
    {
        var plistsource = from prop1 in typeof(T).GetProperties() where prop1.CanRead select prop;
        var plistdest = from prop2 in typeof(U).GetProperties() where prop2.CanWrite select prop;

        foreach (PropertyInfo destprop in plistdest)
        {
            var sourceprops = plistsource.Where((p) => p.Name == destprop.Name &&
              destprop.PropertyType.IsAssignableFrom(p.GetType()));
            foreach (PropertyInfo sourceprop in sourceprops)
            { // should only be one
                destprop.SetValue(dest, sourceprop.GetValue(source, null), null);
            }
        }
    }
}

}

Если вам не нравится метод расширения, вы можете просто переписать его как public static void CopyPropertiesTo (источник объекта, объект dest);

это должно позволить вам сделать что-то вроде этого:

Foo foo = new Foo();
Bar bar = GetBar();
bar.CopyPropertiesTo<Bar, Foo>(foo);
1 голос
/ 07 апреля 2010

Посмотрите эту запись и поставьте проверку типов объектов перед

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...