5

我有两个用户定义的 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. 数据库具有与类几乎完全相同的结构。

此外,还有很多代码已经存在。这些类也从几个接口等继承。现在重构不是一种选择,所以我现在正在寻找一个简单的修复方法。

4

3 回答 3

9

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

于 2013-09-06T21:48:03.147 回答
5

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

于 2013-09-06T21:47:24.353 回答
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 );
}
于 2013-09-06T22:12:19.710 回答