아래 클래스를 사용하여 직렬화를 사용하지 않고 딥 복제를 수행합니다.리플렉션을 사용한 컬렉션 (키/값 쌍)의 완전 복제
public class AbstractClone
{
public AbstractClone Clone()
{
Type typeSource = this.GetType();
AbstractClone tObject = (AbstractClone)FormatterServices.GetUninitializedObject(typeSource);
PropertyInfo[] propertyInfo = typeSource.GetProperties(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
foreach (PropertyInfo property in propertyInfo)
{
if (property.CanWrite)
{
if (property.PropertyType.IsValueType || property.PropertyType.IsEnum || property.PropertyType.Equals(typeof(System.String)))
{
property.SetValue(tObject, property.GetValue(this, null), null);
}
else
{
object objPropertyValue = property.GetValue(this, null);
if (objPropertyValue == null)
{
property.SetValue(tObject, null, null);
}
else
{
property.SetValue(tObject, ((AbstractClone)objPropertyValue).Clone(), null);
}
}
}
}
return tObject;
}
}
복제해야하는 모든 클래스를 상속합니다.
이
사람이 사전의 SortedList 같은 키 값 쌍을 복제 할 수있는 방법을 제안 할 수 등 SortedList, 사전 같은 키 값 쌍 또는 컬렉션을 제외한 모든 객체와 잘 작동합니다.