我有两个用户定义的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
从数据库生成了一个模型。数据库与类几乎完全相同。
此外,它已经有很多代码了。这些类也继承了几个接口等。现在重构不是一个选项,所以我现在正在寻找一个简单的解决方案。
答案 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 );
}