首页 >后端开发 >C++ >C# 的'ToList()”是否创建新的引用列表或元素副本?

C# 的'ToList()”是否创建新的引用列表或元素副本?

Mary-Kate Olsen
Mary-Kate Olsen原创
2025-01-02 19:05:39762浏览

Does C#'s `ToList()` Create a New List of References or Copies of Elements?

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn