可能重复:
How to copy value from class X to class Y with the same property name in c#?
C#4.0
如果我有N个具有相同属性(相同名称和类型)的POCO对象 我想把它们转换成另一个。他们没有任何父母关系,只是POCO。
我可以输入转换后的函数,只将属性值从一个复制到另一个:
obj1.a = obj1.a; obj2.a = obj2.a; ...
但这样做非常无聊,特别是在我在对象中有很多属性的例子中。 有人可能会建议更聪明的方式吗?
答案 0 :(得分:2)
你可以使用像Tcks一样的反射术,或者你可以使用AutoMapper
http://automapper.codeplex.com/
使用AutoMapper,您可以轻松使用Mapper。这是基于公约。如果需要,你也可以做更复杂的事情。参见示例。
答案 1 :(得分:1)
您可以使用反射:
object obj1 = GetObject(1);
object obj2 = GetObject(2);
Type type1 = obj1.GetType();
Type type2 = obj2.GetType();
var properties = (from p1 in type1.GetProperties( BindingFlags.Instance | BindingFlags.Public )
where p1.CanRead && p1.CanWrite
from p2 in type2.GetProperties( BindingFlags.Instance | BindingFlags.Public )
where p2.CanRead && p2.CanWrite
where p1.Name == p2.Name && p1.PropertyType = p2.PropertyType
select new { Property1 = p1, Property2 = p2 }).ToList();
foreach( var props in properties ) {
object value1 = props.Property1.GetValue( obj1, null );
props.Property2.SetValue( obj2, value1, null );
}
然而,反射比代码慢得多。如果您需要良好的性能,可以查看Fasterflect项目,该项目从反射信息中动态生成IL代码。