我有一个列表,该列表在我的程序中一直在不断更新。我希望能够在每次更新后比较列表的初始计数和最终计数。以下仅是示例代码(原始代码太长),但足以捕获问题。
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个漫游器。
复制初始列表的正确方法是什么,这样就不会将新集合简单地添加到原始列表中?
答案 0 :(得分:1)
要执行您想做的事情,您想要复制列表,而不是将新引用分配给同一列表。所以代替
FinalList = InitialList;
使用
FinalList.AddRange(InitialList);
基本上,您拥有的两个变量都引用同一列表。这样,您就有了两个不同的列表,一个带有初始值,一个带有新值。
也就是说,如果您只想存储计数,也可以只存储计数。
int initialCount = InitialList.Count;
FinalList = InitialList;
尽管现在已经有了所需的数据,但是现在不再有理由从一个复制到另一个。
我感觉到您实际上想做的比问题中要说的要多,因此正确的方法可能会根据您实际想做的事情而改变。