//克隆类(克隆出一个一摸一样的对象)
using System.IO;
using System.Xml.Serialization;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
static class CloneClass
{
public static Object Clone(Object needCloneObject)
{
//先把类实例序列化
MemoryStream msSer = new MemoryStream();
XmlSerializer xml = new XmlSerializer(needCloneObject.GetType());
xml.Serialize(msSer, needCloneObject);
byte[] arr = msSer.ToArray();
MemoryStream msDeSer = new MemoryStream(arr);
return xml.Deserialize(msDeSer);
}
//泛型对拷
public static void CopyCollection<T1, T2>(Dictionary<T1, T2> srcDictionary, ref Dictionary<T1, T2> dest)
{
if (dest == null)
dest = new Dictionary<T1, T2>();
else
dest.Clear();
IEnumerator<T1> srcs = srcDictionary.Keys.GetEnumerator();
while (srcs.MoveNext())
{
T1 src = srcs.Current;
try
{
T1 key = (T1)CloneClass.Clone(src);
T2 value;
if (srcDictionary.TryGetValue(key, out value))
{
value = (T2)CloneClass.Clone(value);
dest.Add(key, value);
}
}
catch { }
}
}
public static void CopyCollection<T>(ObservableCollection<T> srcDictionary, ref ObservableCollection<T> dest)
{
if (dest == null)
dest = new ObservableCollection<T>();
else
dest.Clear();
for (int i = 0; i < srcDictionary.Count; i++)
{
T src = srcDictionary[i]; try
{
T value = (T)CloneClass.Clone(src);
dest.Add(value);
}
catch { }
}
}
}
using System.IO;
using System.Xml.Serialization;
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
static class CloneClass
{
public static Object Clone(Object needCloneObject)
{
//先把类实例序列化
MemoryStream msSer = new MemoryStream();
XmlSerializer xml = new XmlSerializer(needCloneObject.GetType());
xml.Serialize(msSer, needCloneObject);
byte[] arr = msSer.ToArray();
MemoryStream msDeSer = new MemoryStream(arr);
return xml.Deserialize(msDeSer);
}
//泛型对拷
public static void CopyCollection<T1, T2>(Dictionary<T1, T2> srcDictionary, ref Dictionary<T1, T2> dest)
{
if (dest == null)
dest = new Dictionary<T1, T2>();
else
dest.Clear();
IEnumerator<T1> srcs = srcDictionary.Keys.GetEnumerator();
while (srcs.MoveNext())
{
T1 src = srcs.Current;
try
{
T1 key = (T1)CloneClass.Clone(src);
T2 value;
if (srcDictionary.TryGetValue(key, out value))
{
value = (T2)CloneClass.Clone(value);
dest.Add(key, value);
}
}
catch { }
}
}
public static void CopyCollection<T>(ObservableCollection<T> srcDictionary, ref ObservableCollection<T> dest)
{
if (dest == null)
dest = new ObservableCollection<T>();
else
dest.Clear();
for (int i = 0; i < srcDictionary.Count; i++)
{
T src = srcDictionary[i]; try
{
T value = (T)CloneClass.Clone(src);
dest.Add(value);
}
catch { }
}
}
}