gpt4 book ai didi

c# - 项目属性清除后添加的项目值发生变化

转载 作者:太空宇宙 更新时间:2023-11-03 10:22:30 25 4
gpt4 key购买 nike

我有一个列表,当我在将它添加到列表后清除列表的 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();

最佳答案

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

这是演示:

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

不要忘记,当您处理像字符串这样不可变的对象时,将在更改操作时创建一个新对象。您的旧对象仍在列表中,而您在别处获得了新对象。

关于c# - 项目属性清除后添加的项目值发生变化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32874286/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com