清除项目属性后添加项目值更改

时间:2015-09-30 19:38:54

标签: c# list clear

我有一个列表,当我将列表的Notes属性添加到列表后,如下面的示例,它也清除了添加的stdList项。我真的不明白为什么?请帮帮我:(

List<Student> stdList = new List<Student>();
Student std = new Student();
std.Notes = new List<string>();
std.Notes.Add("EE");
stdList.Add(std);
std.Notes.Clear();

1 个答案:

答案 0 :(得分:2)

它会发生变化,因为当您添加Student对象时,它会添加对列表中对象的引用。您添加的引用仍将指向您修改的同一对象。因此,对象的任何更改都将反映在列表中。

以下是演示:

StringBuffer sb = new StringBuffer("aa");

List<StringBuffer> list = new ArrayList<StringBuffer>();
list.add(sb);
System.out.println(list);

sb.append("bb");
System.out.println(list);

sb = null;
System.out.println(list);

输出:

aa
aabb
aabb

不要忘记,当你处理像Strings这样不可变的对象时,会在更改操作上创建一个新对象。当你在其他地方找到一个新对象时,你的旧对象仍在列表中。