将一个对象转换为另一个

时间:2013-09-06 21:43:35

标签: c# casting

我有两个用户定义的CLR对象,这些对象是相同的,只是名称不同,例如这段代码:

public class Person
{
  public string Name { get; set; }
  public string Address { get; set; }
  public string LastName { get; set; }
  public string ETC { get; set; }
}

public class PersonData
{
  public string Name { get; set; }
  public string Address { get; set; }
  public string LastName { get; set; }
  public string ETC { get; set; }
}

我知道这可以通过从这些CLR中的任何一个创建一个对象,然后逐个传递所有属性来完成。

但还有另外一种方法吗?我有一些相当大的CLR,15多个属性。

[编辑] 更多背景。那里的课程已经存在。我使用EntityFramework从数据库生成了一个模型。数据库与类几乎完全相同。

此外,它已经有很多代码了。这些类也继承了几个接口等。现在重构不是一个选项,所以我现在正在寻找一个简单的解决方案。

3 个答案:

答案 0 :(得分:8)

假设您不希望两个类都从接口继承,您可以尝试Automapper它是一个自动映射类似类的库。

答案 1 :(得分:4)

如果您是这些类的作者,您可以让它们实现相同的接口,甚至更好地从同一个类继承。这样您就不必将值从一个复制到另一个 - 只需使用对其父类型的引用即可。请记住,拥有完全相同成员的不相关类型的夫妇是一个明确的迹象,表明您需要尽快重新考虑您的设计。

答案 2 :(得分:2)

而且,为了完整起见,这就是反思的样子:

var a = new Person( ) { LastName = "lastn", Name = "name", Address = "addr", ETC = "etc" };
var b = new PersonData( );

var infoPerson = typeof( PersonData ).GetProperties( );
foreach ( PropertyInfo pi in typeof( Person ).GetProperties( ) ) {
    object value = pi.GetValue( a, null );
    infoPerson.Single( p => p.Name == pi.Name )
        .SetValue( b, value, null );
}
相关问题