ObjectHelper.cs 843 B

123456789101112131415161718192021222324252627
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection;
  5. using System.Text;
  6. namespace DirectService.Tools
  7. {
  8. public class ObjectHelper
  9. {
  10. //深度复制
  11. public static T DeepCopy<T>(T obj)
  12. {
  13. //如果是字符串或值类型则直接返回
  14. if (obj is string || obj.GetType().IsValueType) return obj;
  15. object retval = Activator.CreateInstance(obj.GetType());
  16. FieldInfo[] fields = obj.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Static);
  17. foreach (FieldInfo field in fields)
  18. {
  19. try { field.SetValue(retval, DeepCopy(field.GetValue(obj))); }
  20. catch { }
  21. }
  22. return (T)retval;
  23. }
  24. }
  25. }