如何解决为什么自动实现的列表属性充当 C# 中所有实例的共享属性?
我已经实现了以下代码,当我想从其中一个实例的 ColumnsList 更新(添加或删除)时,它会影响所有其他实例。
public class XMLAttributeStructure
{
public string TableName { get; set; }
public int Row { get; set; }
public List<string> ColumnsList { get; set; }
public string Attribute { get; set; }
public string Value { get; set; }
public XMLAttributeStructure(string tablename,int row,List<string> columnlist,string attribute,string value)
{
TableName = tablename;
Row = row;
ColumnsList = columnlist;
Attribute = attribute;
Value = value;
}
}
输出:
例如认为我已经有 2 个对象,其中 columnList 包含“No”、“Status”。并认为我使用以下内容从第一个实例的 columnList 中删除了“ST”。
selectedObj.ColumnsList.Remove("ST");
selectedObj 是第一个实例。但是第二个对象中的“ST”也被删除了。
解决方法
不考虑任何其他问题,最简单的解决方案是重新分配您的列表
public XMLAttributeStructure(string tablename,int row,List<string> columnlist,string attribute,string value)
{
...
ColumnsList = columnlist.ToList();
另一种解决方案是在调用构造函数时执行此操作。这样构造函数就不会做任何意外的事情,它让调用者选择他们是否希望类有一个新实例
XMLAttributes.Add(
new XMLAttributeStructure(
tableName,i,colList.ToList(),attribute,value));
更长的故事,当您复制引用类型时,您不是在复制实际对象(克隆),而是在复制对对象的引用
其他资源
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。