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



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

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个机器人。

复制初始列表的正确方法是什么,因此不简单地添加新集?

要做您似乎想做的事情,您想复制列表,而不是为同一列表分配新的引用。所以而不是

FinalList = InitialList;

使用

FinalList.AddRange(InitialList);

基本上,您所拥有的是两个变量,都指的是同一列表。这样,您有两个不同的列表,一个具有初始值,一个具有新值。

也就是说,如果您想做的一切,您也可以存储计数。

int initialCount = InitialList.Count;
FinalList = InitialList;

,如果您已经拥有所需的数据,现在不再有理由将一个复制到另一个复制。

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

最新更新