방법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();
        }
    }
}