C#具有相同属性转换的对象

时间:2010-08-09 06:48:17

标签: .net c#-4.0

  

可能重复:
  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; ...

但这样做非常无聊,特别是在我在对象中有很多属性的例子中。 有人可能会建议更聪明的方式吗?

2 个答案:

答案 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代码。