为什么自动实现的列表 属性 充当 C# 中所有实例的共享 属性?
Why auto-implemented list property act as a shared property for all instances in 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 个包含“No”、“Status”的 columnsList 对象。并认为我使用以下方法从第一个实例的 columnList 中删除了“ST”。
selectedObj.ColumnsList.Remove("ST");
selectedObj 是第一个实例。但是第二个对象中的“ST”也被删除了。
不管任何其他问题,最简单的解决方案就是重新分配您的列表
public XMLAttributeStructure(string tablename, int row, List<string> columnlist, string attribute, string value)
{
...
ColumnsList = columnlist.ToList();
另一种解决方案是在调用构造函数时执行此操作。这样构造函数就不会做任何意想不到的事情,它让调用者选择他们是否希望 class 有一个新的实例
XMLAttributes.Add(
new XMLAttributeStructure(
tableName,
i,
colList.ToList(),
attribute,
value));
长话短说,当您复制引用类型时,您并不是在复制实际对象(克隆),而是在复制对该对象的引用
其他资源
我已经实现了以下代码,当我想从其中一个实例的 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 个包含“No”、“Status”的 columnsList 对象。并认为我使用以下方法从第一个实例的 columnList 中删除了“ST”。
selectedObj.ColumnsList.Remove("ST");
selectedObj 是第一个实例。但是第二个对象中的“ST”也被删除了。
不管任何其他问题,最简单的解决方案就是重新分配您的列表
public XMLAttributeStructure(string tablename, int row, List<string> columnlist, string attribute, string value)
{
...
ColumnsList = columnlist.ToList();
另一种解决方案是在调用构造函数时执行此操作。这样构造函数就不会做任何意想不到的事情,它让调用者选择他们是否希望 class 有一个新的实例
XMLAttributes.Add(
new XMLAttributeStructure(
tableName,
i,
colList.ToList(),
attribute,
value));
长话短说,当您复制引用类型时,您并不是在复制实际对象(克隆),而是在复制对该对象的引用
其他资源