.ToArray()를 사용하여 List의 전체 사본으로 배열을 만들 때 문제가 있습니다. 여기 리스트 <T> .ToArray()가 예상대로 작동하지 않습니다.
내 테스트 클래스입니다 :public class MyClass
{
public Color Color1;
public MyClass(Color color)
{
this.Color1 = color;
}
}
그리고 여기에 내가
List<MyClass> listColors = new List<MyClass>();
listColors.Add(new MyClass(Color.Blue));
listColors.Add(new MyClass(Color.Green));
listColors.Add(new MyClass(Color.Red));
MyClass[] arrayColors = listColors.ToArray();
arrayColors[2].Color1 = Color.Purple;
Console.WriteLine(arrayColors[2].Color1.ToString());
Console.WriteLine(listColors[2].Color1.ToString());
결과 목록의 ToArray()를 수행하는 데 사용하는 코드입니다 :
Color [Purple]
Color [Purple]
은 보시다시피, 나는 배열을 만든 MyClass .ToArray() 메서드를 다음이 배열의 요소를 3 변경하지만 왜 목록 listColors 역시 변경되었습니다.
.NET 2.0을 사용하여이 샘플을 Windows XP에서 실행합니다.
나는 윈도우 7에이 샘플을 실행하려고 여기 결과입니다
Color [Purple]
Color [Red]
그래서 나는,이 .NET 프레임 워크의 문제라고 생각은.
어쨌든 .NET 2.0에서 .NET 4와 같은 List의 전체 복사본을 만들 수 있습니까? 이것은 단지 시험 수업 일뿐입니다. 제 일은 더 커요.
대단히 감사합니다.
.ToArray()가 새로운 컬렉션을 만들 구현해야하지만, 새로운 객체를 생성하지 않습니다 . 실제로 같은 대상을 수정하고 있습니다. – drch
예를 다시 확인하십시오. .NET 4에서이 결과를 얻었고 첫 번째 결과를 얻었습니다. 이유는 무엇인지 설명하고 있습니다. – kobigurk
사본이 얼마나 있습니까? (Bee Gees pun을 변명하십시오) – Jodrell