ToList() 是否创建一个新列表?
在 C# 中,ToList() 方法返回一个新列表,其中包含来自原创收藏。然而,问题出现了,它是否创建了一个新的引用列表或元素的副本?
考虑以下示例:
public class MyObject { public int SimpleInt { get; set; } } public void RunChangeList() { var objs = new List<MyObject>() { new MyObject() { SimpleInt = 0 } }; var whatInt = ChangeToList(objs); } public int ChangeToList(List<MyObject> objects) { var objectList = objects.ToList(); objectList[0].SimpleInt = 5; return objects[0].SimpleInt; }
在这种情况下,ToList() 创建一个新的对与原始列表相同的对象的引用列表。这是因为 MyObject 是引用类型,这意味着它在内存中存储对象的地址。
当新列表中引用的对象的 SimpleInt 属性发生更改时,更改会传播回原来的名单。这是因为新列表和原始列表都引用同一个对象。
如果 MyObject 被声明为结构而不是类,则 ToList() 方法将创建一个新列表,其中包含以下元素的副本原来的名单。在这种情况下,对新列表中的元素所做的更改不会影响原始列表中的相应元素。
以上是C# 的'ToList()”是否创建新的引用列表或元素副本?的详细内容。更多信息请关注PHP中文网其他相关文章!