private object CloneObject(object o)
{
Type t = o.GetType();
PropertyInfo[] properties = t.GetProperties();
Object p = t.InvokeMember("", System.Reflection.BindingFlags.CreateInstance, null, o, null);
foreach (PropertyInfo pi in properties)
{
if (pi.CanWrite)
{
pi.SetValue(p, pi.GetValue(o, null), null);
}
}
return p;
}
还有一种方式,可以利用运行时序列化来deep clone.(前提是该object一定是Serializable的)
static object DeepClone(object original)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Context=new StreamingContext(StreamingContextStates.Clone);
// Serialize the original object to memory
formatter.Serialize(stream, original);
stream.Position = 0;
// Deserialize memory stream to a new copy object
return formatter.Deserialize(stream);
}
}