【问题标题】:C# Objects with the same properties conversion [duplicate]具有相同属性转换的C#对象[重复]
【发布时间】:2010-08-09 06:48:17
【问题描述】:

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

但是这样做很无聊,尤其是在我在对象中有许多属性的示例中。 有人可能会建议更聪明的方法吗?

【问题讨论】:

    标签: .net c#-4.0


    【解决方案1】:

    您可以像 Tcks 所描述的那样使用反射,也可以使用 AutoMapper

    http://automapper.codeplex.com/

    使用 AutoMapper,您可以轻松使用 Mapper。这是基于公约。如果需要,您也可以做更复杂的事情。请参阅示例。

    【讨论】:

      【解决方案2】:

      你可以使用反射:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2021-11-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-03-22
        相关资源
        最近更新 更多