如何存储对象列表的初始状态,以便可以将它们与更新的列表进行比较?

时间:2019-05-06 01:50:30

标签: c#

我有一个列表,该列表在我的程序中一直在不断更新。我希望能够在每次更新后比较列表的初始计数和最终计数。以下仅是示例代码(原始代码太长),但足以捕获问题。

class Bot
{
    public int ID { get; set; }
}

public class Program
{
    public void Main()
    {
        List<Bot> InitialList = new List<Bot>();
        List<Bot> FinalList = new List<Bot>();

        for (int i = 0; i < 12345; i++)
        {
            Bot b = new Bot() {ID = i};
            InitialList.Add(b);
        }

        FinalList = InitialList;

        for (int i = 0; i < 12345; i++)
        {
            Bot b = new Bot() {ID = i};
            FinalList.Add(b);
        }
        Console.Write($"Initial list has {InitialList.Count} bots");
        Console.Write($"Final list has {FinalList.Count} bots");
    }
}

输出:

Initial list has 24690 bots 
Final list has 24690 bots

预计两个列表中都有12345个漫游器。

复制初始列表的正确方法是什么,这样就不会将新集合简单地添加到原始列表中?

1 个答案:

答案 0 :(得分:1)

要执行您想做的事情,您想要复制列表,而不是将新引用分配给同一列表。所以代替

FinalList = InitialList;

使用

FinalList.AddRange(InitialList);

基本上,您拥有的两个变量都引用同一列表。这样,您就有了两个不同的列表,一个带有初始值,一个带有新值。

也就是说,如果您只想存储计数,也可以只存储计数。

int initialCount = InitialList.Count;
FinalList = InitialList;

尽管现在已经有了所需的数据,但是现在不再有理由从一个复制到另一个。

我感觉到您实际上想做的比问题中要说的要多,因此正确的方法可能会根据您实际想做的事情而改变。