如何在c#中使用其构造函数创建对象的副本?

时间:2017-07-21 14:57:15

标签: c# .net

我正在尝试使用其构造函数创建对象的副本,但是当我修改副本的某些内容时,原始对象也会被修改。如果你能帮助我,我将不胜感激,这是我的代码:

public class XMLStructure
{
 public XMLStructure(XMLStructure xmlCopy )
  {
     this.Action = xmlCopy.Action;
     this.Name = xmlCopy.Name;
  }
  public String Name { get; set; }
  public ActionXML Action { get; set; }
}

3 个答案:

答案 0 :(得分:7)

ActionXML是引用类型,您还需要创建ActionXML的副本。

Here是指向网页的链接,用于解释参考类型与值类型。

答案 1 :(得分:1)

你需要"深度克隆"避免你观察到的问题的对象。多年来,在.Net中实现这一目标的方法已经发生了变化。今天最简单的选择是将对象序列化为JSON字符串,然后从该JSON字符串中水化新对象。

var json = JsonConvert.SerializeObject(xmlSourceObject );
var clonedXmlObject = JsonConvert.DeserializeObject<XMLStructure>(json);

更传统的.Net解决方案是实现ICloneable接口。

答案 2 :(得分:1)

你需要为ActionXML和该类中的任何其他引用类型变量做同样的事情(添加构造函数,允许复制)。