我有两个清单。当我将List1
分配给List2
并更新List1
时,List2
也会自动更新。 List2
不应更新。为什么会这样?
这是我的代码:
public List<TrialBalance> TBal { get; set; }
public List<TrialBalance> PrevTBal { get; private set; }
if (this.PrevTBal == null)
{
this.PrevTBal = this.TBal;
}
for (int x = 0; x < this.TBal.Count; x++)
{
this.TBal[x].Balance = this.TBal[x].Balance + adjustments;
}
答案 0 :(得分:3)
您只是分配引用,而不是创建列表或列表中的项目的副本。
您应该创建一个新列表并将所有项目添加到其中。
this.PrevTBal = new List<TrialBalance>(this.TBal.Select(b => clone(b));
答案 1 :(得分:3)
当您指定List<T>
时,您将把句柄复制到内存中的实际列表,这意味着两个变量都引用了相同的列表实例。
为了避免这种情况,您需要克隆列表本身。在这种情况下,这可能意味着需要做两件事 - 首先,克隆TrialBalance
,然后克隆列表:
// This assumes a TrialBalance.Clone() method which returns a new TrialBalance copy
this.PrevTBal = this.TBal.Select(tb => tb.Clone()).ToList();
答案 2 :(得分:0)
替换
if (this.PrevTBal == null)
{
this.PrevTBal = this.TBal;
}
由:
if (this.PrevTBal == null)
{
this.PrevTBal = this.TBal.ToList();
}
这样你实际上是在创建它的副本,而不仅仅是引用它。