어디서든 쓸수있는 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을 해주어야 포멧팅 시리얼라이징이 된다.
'프로그래밍 > C#' 카테고리의 다른 글
[C#] 문자열 정렬 OrderBy , OrderByDescending (0) | 2021.04.15 |
---|---|
C# 시간재기 stopwatch (0) | 2018.09.07 |
C# [DataContract], [DataMember] namespace (0) | 2018.04.27 |
C# Log4Net 사용하기 - 파일편 (0) | 2018.04.26 |
C# 파일열기대화상자 및 필터이용방법 (0) | 2018.01.18 |