我正在尝试使用其构造函数创建对象的副本,但是当我修改副本的某些内容时,原始对象也会被修改。如果你能帮助我,我将不胜感激,这是我的代码:
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; }
}
答案 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和该类中的任何其他引用类型变量做同样的事情(添加构造函数,允许复制)。