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 중국어 웹사이트의 기타 관련 기사를 참조하세요!