如果我从现有列表创建一个新的List <t>,那么成员是否相等?</t>

时间:2010-08-31 16:40:14

标签: c# .net generics

假设我有一个List<Stuff> listA,其中包含一些项目。我创建了第二个列表如下:

List<Stuff> listB = new List<Stuff>(listA);

假设我有一个来自listA的项目,我尝试将其从listB中移除:

Stuff itemFromA = listA[0];
listB.Remove(itemFromA);

假设Stuff是一个类,是否应该从listB成功删除该项?换句话说,成员是相同的对象还是创建新列表的过程克隆项目?

我正在调试某些代码中的行为我正在调试.Remove无法从listB删除该项目。

1 个答案:

答案 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