我想做的事情如下:
MyObject myObj = GetMyObj(); // Create and fill a new object
MyObject newObj = myObj.Clone();
Run Code Online (Sandbox Code Playgroud)
然后更改未在原始对象中反映的新对象.
我不经常需要这个功能,所以当有必要的时候,我已经使用了创建一个新对象然后单独复制每个属性,但它总是让我觉得有更好或更优雅的处理方式情况.
如何克隆或深度复制对象,以便可以修改克隆对象而不会在原始对象中反映任何更改?
我正在尝试使用AutoMapper深度克隆以下类:
public class MainData
{
public MainData()
{
Details = new List<Detail>();
}
public int Id { get; private set; }
public DateTime LastUpdate { get; private set; }
public IList<Detail> Details { get; private set; }
public int Prop1 { get; set; }
public int Prop2 { get; set; }
public void AddDetail(Detail detail)
{
Details.Add(detail);
}
public void RemoveDetail(Detail detail)
{
Details.Remove(detail);
}
public MainData Clone()
{
Mapper.Reset();
Mapper.CreateMap<MainData, MainData>().ForMember(d => d.Id, o => o.Ignore());
// Mapper.CreateMap<Detail, Detail>().ForMember(d …
Run Code Online (Sandbox Code Playgroud) 鉴于:
问题:
我收到如下错误:
无法序列化成员[namespace].[entity].[property]类型为Iesi.Collections.Generic.ISet`1 [[namespace].[entity],[assembly],Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]因为它是一个接口.
您必须在Iesi.Collections.Generic.HashedSet`1 [[namespace].[entity],[assembly],Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]上实现默认访问器,因为它继承自ICollection.
我的问题:
作为旁注,我试着谷歌寻求帮助.
- 我不认为这是一个新问题.