如何解决C# ToList() 方法是否真的制作了卷影副本?
根据以下链接,在调用 ToList() 方法时会进行卷影复制。
我测试了一些案例,但我发现了一些奇怪的东西。
在我看来,Custom Class 和 String 都是对象,有什么区别? 任何人都可以建议吗?非常感谢!
var originalList1 = new List<Person> { new Person { Name = "Apple" },new Person { Name = "Banana" } };
var copyList1 = originalList1.ToList();
originalList1[0].Name = "Orange";
Console.WriteLine(originalList1[0].Name); // Orange
Console.WriteLine(copyList1[0].Name); // Orange
var originalList2 = new List<string> { "Apple","Banana" };
var copyList2 = originalList2.ToList();
originalList2[0] = "Orange";
Console.WriteLine(originalList2[0]); // Orange
Console.WriteLine(copyList2[0]); // Apple --- Why?
解决方法
你不能“改变”一个字符串——字符串是不可变的。您正在用新字符串替换原始列表中位置 0
处的字符串。这不会影响另一个列表的索引 0 处的字符串。
在 List<Person>
情况下,列表包含对对象的引用。复制列表时 - 引用 被复制,但它们指向相同的对象,因此替换这些对象之一的属性会反映在两个列表中。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。