>백엔드 개발 >C++ >C#의 ToList()는 목록 요소의 전체 복사본을 생성합니까, 아니면 얕은 복사본을 생성합니까?

C#의 ToList()는 목록 요소의 전체 복사본을 생성합니까, 아니면 얕은 복사본을 생성합니까?

DDD
DDD원래의
2025-01-04 00:28:39695검색

Does C#'s ToList() Create a Deep Copy or a Shallow Copy of the List's Elements?

ToList(): 새 목록을 생성합니까?

C#에서 ToList()는 다음을 사용하여 새 목록을 생성하는 메서드입니다. 기존 목록의 요소 복사본입니다. 클래스와 같은 참조 유형의 경우 복사본에는 원본과 동일한 개체에 대한 참조가 포함됩니다.

다음 코드를 고려하세요.

public class MyObject
{
    public int SimpleInt { get; set; }
}
...
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;
}

이 코드에서 ChangeToList 메서드는 MyObject 개체 목록을 생성하고 ToList()를 사용하여 이를 새 목록으로 변환합니다. 그런 다음 새 목록에 있는 첫 번째 개체의 SimpleInt 속성을 수정합니다.

여기서 주목해야 할 핵심 사항은 MyObject가 참조 유형이라는 것입니다. 따라서 ToList() 작업은 새 목록을 생성하지만 새 목록의 요소는 원래 목록의 동일한 개체에 대한 참조입니다. 결과적으로 새 목록에서 참조되는 개체의 SimpleInt 속성이 수정되면 변경 내용이 원본 목록의 해당 개체에도 반영됩니다. 이것이 새 목록의 수정 사항이 원래 목록에 전파되므로 RunChangeList() 메서드의 출력이 5가 되는 이유입니다.

위 내용은 C#의 ToList()는 목록 요소의 전체 복사본을 생성합니까, 아니면 얕은 복사본을 생성합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.