방법1.직렬화 방법..
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace ConsoleApplication2
{
//객체 직렬화 attribute , DeepCopy의 Clone을 쓰기 위해서는 직렬화 attribute를 써야됨..
[System.Serializable]
public class Sample
{
public int id;
}
class Program
{
static void Main(string[] args)
{
//니가 값을 가지고 있는 데이터/
Sample[] dataArray = new Sample[10];
//임의로 값을 넣어줌. (1~10의 값을 ID에 넣어줌)
for (int i = 0, imax = dataArray.Length; i < imax; i++)
{
dataArray[i] = new Sample()
{
id = i + 1,
};
}
//새로운 데이터 여기서 복사된 객체가 만들어짐.
Sample[] newDataArray = DeepCopy.Clone(dataArray);
}
}
//깊은 복사를 해주는 클래스
public static class DeepCopy
{
public static T Clone<T>(T sorce)
{
BinaryFormatter formatter = new BinaryFormatter();
Stream stream = new MemoryStream();
formatter.Serialize(stream, sorce);
stream.Seek(0, SeekOrigin.Begin);
return (T)formatter.Deserialize(stream);
}
}
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
방법2.ICloneable인터페이스 Clone함수 구현방법
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
public class Sample : ICloneable
{
public int id;
public object Clone()
{
return new Sample()
{
id = this.id,
};
}
}
class Program
{
static void Main(string[] args)
{
//니가 값을 가지고 있는 데이터/
Sample[] dataArray = new Sample[10];
//임의로 값을 넣어줌. (1~10의 값을 ID에 넣어줌)
for (int i = 0, imax = dataArray.Length; i < imax; i++)
{
dataArray[i] = new Sample()
{
id = i + 1,
};
}
//Clone을 이용해 새로운 카피된 배열을 만듬
Sample[] newDataArray = dataArray.Select(n => (Sample)n.Clone()).ToArray();
}
}
}
씨샵 array.copy 없음?
C# 깊은 복사 방법... 컴파일러 파일을 깊은 폴더에 복사한다................. 끗
딥카피
있지만 말그대로 array의 카피임..컨테이너가 담고있는 객체의 복사가 아님..저분이 원하는건 그게 아닌거같아서 쓴글..