代码之家  ›  专栏  ›  技术社区  ›  Coppermill

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

  •  0
  • Coppermill  · 技术社区  · 16 年前

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

    例如

    object1.name=object2.name; object1.age=object2.age;

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

    2 回复  |  直到 12 年前
        1
  •  4
  •   Community Mohan Dere    9 年前

    我回答了一个类似的问题 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);
    
        2
  •  1
  •   Community Mohan Dere    9 年前

    看到这个 post ,并检查之前的对象类型