C# List CopyTo Method
하나의 List Collection 이 있다. 이 데이터를 배열에 복사하고 싶을 List Collection 의 CopyToMethod 메소드를 사용하면 된다.
사용 상 특징적인 것은
1. 1차원 배열에 복사한다.
2. 이때 복사는 Shallow copy 가 아니라 Deep copy 로 복사한다.
3. 복사 대상인 List Collection 의 데이터 개수가 복사 할 곳인 배열의 크기가 작으면 안된다.
예제에서는 CopyToMethod 의 동작과 Shallow copy 인지 Deep Copy 인지 테스트 해 보았다.
namespace CopyToDemo
{
internal class Program
{
public static void Main(string[] args)
{
var list = new List<int>() { 5, 6, 7 };
int[] array = new int[list.Count];
list.CopyTo(array);
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
Console.WriteLine(array[2]);
Console.WriteLine(Environment.NewLine);
array[0] = 1;
array[1] = 2;
array[2] = 3;
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
Console.WriteLine(array[2]);
Console.WriteLine(Environment.NewLine);
foreach (int n in list)
{
Console.WriteLine(n);
}
}
}
}
{
internal class Program
{
public static void Main(string[] args)
{
var list = new List<int>() { 5, 6, 7 };
int[] array = new int[list.Count];
list.CopyTo(array);
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
Console.WriteLine(array[2]);
Console.WriteLine(Environment.NewLine);
array[0] = 1;
array[1] = 2;
array[2] = 3;
Console.WriteLine(array[0]);
Console.WriteLine(array[1]);
Console.WriteLine(array[2]);
Console.WriteLine(Environment.NewLine);
foreach (int n in list)
{
Console.WriteLine(n);
}
}
}
}
출력 결과
음... 아직 사용해 보지 못하였지만 이제 알았으니 필요할 때 기억할 수 있었으면 한다.
왜 하필이면 Int형 리스트를 쓰셧죠?
답글삭제깊은복사를 테스트 하려면 클래스형으로 해보셧어야했을텐데요;;
저부분이 맞는지는 잘모르겠으나 ToList로 할경우 얕은복사가 되는데 그경우에도 같은결과가 나옵니다.;
수고하세요
우선, 위 내용과 예제는 출처 블로그에 위치한 내용을 기반으로 했습니다.
답글삭제깊은 복사를 테스트 하려면 클래스 형으로 테스트 해야 한다고 하셨는데... C# 3.5에 추가된 제네릭 리스트는 참조형이므로 클래스와 같은 타입이 되어 상관없을 것으로 판단됩니다. (배열도 요소가 무엇이 되었든간에 C#에서는 참조타입)
원작자는 list.CopyTo 메소드가 깊은 복사를 하지 않았다면 배열의 요소를 변경하였을 때, 리스트의 요소들도 변경된다라는 것을 설명하려고 했던것 같습니다.
ToList 확장 메소드와 CopyTo 메소드는 사용하는 경우가 다르고,
CopyTo 메소드를 설명하려는 포스트이기에 CopyTo 메소드를 사용한것 같습니다.
잘못된 내용일 경우 알려주세요 ^^