어디서든 쓸수있는 DeepCopy 클래스

아 이번에 자꾸 어디서 알수없는 래퍼런스 자료구조가 자꾸 바뀌어서 딥카피로 해결했다

딥카피만세

1
2
3
4
5
6
7
8
9
10
11
12
13
public class StaticDeepCopy
{
    public static T DeepClone<T>(T obj)
    {
        using (var ms = new MemoryStream())
        {
            var formatter = new BinaryFormatter();
            formatter.Serialize(ms, obj);
            ms.Position = 0;
            return (T)formatter.Deserialize(ms);
        }
    }
}
http://colorscripter.com/info#e" target="_blank" style="color:#e5e5e5text-decoration:none">Colored by Color Scripter
http://colorscripter.com/info#e" target="_blank" style="text-decoration:none;color:white">cs

 

예제는 다음과 같다. 걍 쓰면됌

Dictionary<string, WatchNode> temp = new Dictionary<string, WatchNode>();

Dictionary<string, WatchNode> deepCopy = StaticDeepCopy.DeepClone(temp);

이렇게 하면 값은 같지만 메모리적으로 temp 와 deepCopy는 전혀 다르당. 

 

아, 단점은 딥카피 하고싶은 자료구조마다 Serializable을 해야된다는것..

1
2
3
4
5
    [Serializable]
    public class WatchNode
    {
        public string test;
    }
 

이런식으로 클래스 위에 Serializable을 해주어야 포멧팅 시리얼라이징이 된다.

+ Recent posts