C#:如何将类实例的值添加到列表并解除引用关联?
如何在C#中添加对象到列表时避免引用关联?
代码定义
首先定义如下类:
public class Liste { public int valueInt { get; set; } public List<string> valueString = new List<string>(); }
同时定义以下列表变量:
public List<Liste> oray2 = new List<Liste>(); public Liste oray3 = new Liste();
问题复现
尝试手动为oray2列表添加元素:
oray3.valueInt = 10; oray3.valueString.Add("Text1"); oray3.valueString.Add("Text2"); oray3.valueString.Add("Text3"); oray2.Add(oray3); oray3.valueString.Remove("Text2");
执行后发现oray2列表中的元素也受到了影响——这是因为oray2.Add(oray3)并没有添加独立的对象副本,而是让oray2[0]和oray3指向了同一个对象,形成了引用关联。
可行解决方案
可以通过重新初始化oray3的方式切断关联,后续修改oray3就不会影响oray2中的元素:
方法一:
oray3 = null;
方法二:
oray3 = new Liste();
这两种方案都能生效,因为重新赋值后,oray3指向了新的对象(或空),而原来的对象仅被oray2持有,后续操作新的oray3不会再影响之前添加到列表里的对象。
内容的提问来源于stack exchange,提问作者Oray
相关产品推荐
相关产品推荐

