将列表分配给另一个列表以前的列表会自动更改

时间:2013-12-20 00:37:25

标签: c#

我有两个清单。当我将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;
}

3 个答案:

答案 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();
        }

这样你实际上是在创建它的副本,而不仅仅是引用它。