使用现有对象数据填充新对象

时间:2012-10-29 15:46:59

标签: c# oop

我有一个返回名为“UserSettings”的自定义对象的服务在我的应用程序中我想向“UserSettings”对象添加更多属性,所以我创建了一个名为“MyUserSettings”的新对象,它继承自“UserSettings”现在我想要使用“UserSettings”中保存的现有数据和我的新属性的新数据填充我的新对象。我不想将每个属性逐个映射到新对象中的相同属性,如此..

_MyUserSettings.Name=_UserSettings.Name;

有没有办法或更好的方法来解决我正在做的事情,将现有对象的所有属性一次性填充到我的新对象中?

2 个答案:

答案 0 :(得分:4)

是的,您可以使用Copy Constructor模式。它会给你带来另一个好处 - 你不需要公共属性设置器,所以对象变得不可变。

public MyUserSettings(UserSettings baseSettings)
{
    // TODO: set all properties
}

答案 1 :(得分:2)

不幸的是,这是唯一的方法,但具体的机制可以改变。有很多方法(不是全部列出):

  • 复制构造函数,它接受一个项目并手动复制字段。
  • 使用反射具有更通用的实现相同的机制。
  • 使用类似AutoMapper的内容。

他们都归结为几乎做同样的事情。

如果UserSettings实际上是MyUserSettings,那么您可以简单地投射它:

var mySettings = (MyUserSettings)settings;

但是,如果UserSettings确实是UserSettings,则会失败。