2

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

_MyUserSettings.Name=_UserSettings.Name;

有没有一种方法或更好的方法可以一次性将现有对象的所有属性填充到我的新对象中?

4

2 回答 2

4

是的,您可以使用复制构造函数模式。它会给您带来另一个好处 - 您不需要公共属性设置器,因此对象变得不可变。

public MyUserSettings(UserSettings baseSettings)
{
    // TODO: set all properties
}
于 2012-10-29T15:50:56.080 回答
2

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

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

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

如果UserSettings实际是 aMyUserSettings那么你可以简单地转换它:

var mySettings = (MyUserSettings)settings;

但是,如果UserSettings是真的,这将失败UserSettings

于 2012-10-29T15:51:16.280 回答