1. 程式人生 > >C#深拷貝擴充套件方法(引用型別利用序列化實現深拷貝)

C#深拷貝擴充套件方法(引用型別利用序列化實現深拷貝)

        /// <summary>
        /// 深拷貝
        /// 注意:T必須標識為可序列化[Serializable]
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="obj"></param>
        /// <returns></returns>
        public static T DeepCopy<T>(this T obj)
            where T : class
        {
            try
            {
                if (obj == null)
                {
                    return null;
                }

                BinaryFormatter binaryFormatter = new BinaryFormatter();
                using (MemoryStream stream = new MemoryStream())
                {
                    binaryFormatter.Serialize(stream, obj);
                    stream.Position = 0;
                    return (T)binaryFormatter.Deserialize(stream);
                }
            }
            catch
            {
                return null;
            }
        }

注意:

1.上述方法中,限定泛型T為引用型別,因為值型別本身不需要深拷貝;

2.型別T必須標明可序列化,即類前面新增特性[Serializable]。