假设我有一个List<Stuff> listA
,其中包含一些项目。我创建了第二个列表如下:
List<Stuff> listB = new List<Stuff>(listA);
假设我有一个来自listA
的项目,我尝试将其从listB
中移除:
Stuff itemFromA = listA[0];
listB.Remove(itemFromA);
假设Stuff
是一个类,是否应该从listB
成功删除该项?换句话说,成员是相同的对象还是创建新列表的过程克隆项目?
我正在调试某些代码中的行为我正在调试.Remove
无法从listB
删除该项目。
答案 0 :(得分:11)
List<T> Constructor (IEnumerable<T>)不会克隆项目。
对于值类型,复制值,对于引用类型,对同一对象的引用将添加到列表中。
List<object> listA = new List<object>();
listA.Add(new object());
List<object> listB = new List<object>(listA);
bool result = object.ReferenceEquals(listA[0], listB[0]);
// result == true