创建列表的独立副本(而不是其中的对象)的最快方法是什么?

Sae*_*eid 0 c# list

说我有一个ListA.我想制作一个重复的ListB,所以当我使用ListB.Remove(SomeItem);它时不会影响listA.

列表项应该引用相同的对象.

由于这是在循环中使用,因此使用资源要求最低的方法很重要.但我不知道如何以最有效的方式做到这一点.

Mat*_*son 5

你想要一个浅层克隆,你只需使用这个List<T>构造函数即可:

var shallowClone = new List(originalList);
Run Code Online (Sandbox Code Playgroud)

请注意,此构造函数的实现检查是否originalList支持该Count属性,如果支持该属性,则使用它来预先调整列表大小以避免不必要的内存分配.这使它非常理想:

_items = new T[count];
c.CopyTo(_items, 0);
_size = count;
Run Code Online (Sandbox Code Playgroud)

但是,我已经查看了它的实现,Enumerable<T>.ToList()它所做的只是调用List<T>上面的构造函数.

所以这段代码几乎完全相同(并且将以相同的速度运行):

var shallowClone = originalList.ToList();
Run Code Online (Sandbox Code Playgroud)