Object_Clone

Posted on 2011-08-18 16:24  leon_ALiang  阅读(206)  评论(0编辑  收藏  举报

        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);
            }
        }

Copyright © 2024 leon_ALiang
Powered by .NET 8.0 on Kubernetes