将对象复制到另一个对象但仅使用相同的字段

时间:2010-04-06 19:52:08

标签: c# reflection object

我想将一个对象复制到另一个对象,并且要复制具有相同名称和类型的字段。也许使用反思。

e.g。

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

但是如果object2.Address不在object1中,那么它将被忽略,反之亦然。

2 个答案:

答案 0 :(得分:5)

我回答了类似的问题here。不同之处在于您希望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(object source,object dest);

这应该让你做这样的事情:

Foo foo = new Foo();
Bar bar = GetBar();
bar.CopyPropertiesTo<Bar, Foo>(foo);

答案 1 :(得分:1)

请参阅此post ,并在

之前检查对象类型