我想将一个对象复制到另一个对象,并且要复制具有相同名称和类型的字段。也许使用反思。
e.g。
object1.Name = object2.Name; object1.Age = object2.Age;
但是如果object2.Address不在object1中,那么它将被忽略,反之亦然。
答案 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 ,并在
之前检查对象类型