DeepCopyUtil.cs 828 B

12345678910111213141516171819202122232425262728
  1. using System;
  2. using System.Collections.Generic;
  3. using System.IO;
  4. using System.Linq;
  5. using System.Runtime.Serialization.Formatters.Binary;
  6. using System.Text;
  7. using System.Threading.Tasks;
  8. namespace GeekDesk.Util
  9. {
  10. public static class DeepCopyUtil
  11. {
  12. // 使用序列化和反序列化实现深度拷贝
  13. public static T DeepCopy<T>(T obj)
  14. {
  15. if (obj == null)
  16. throw new ArgumentNullException(nameof(obj));
  17. using (var memoryStream = new MemoryStream())
  18. {
  19. var formatter = new BinaryFormatter();
  20. formatter.Serialize(memoryStream, obj); // 序列化
  21. memoryStream.Seek(0, SeekOrigin.Begin);
  22. return (T)formatter.Deserialize(memoryStream); // 反序列化
  23. }
  24. }
  25. }
  26. }