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