internal static object CloneClassInternal(object obj, DeepCloneState state) { if (obj == null) { return(null); } Func <object, DeepCloneState, object> cloner = (Func <object, DeepCloneState, object>)DeepClonerCache.GetOrAddClass(obj.GetType(), (Type t) => GenerateCloner(t, asObject: true)); if (cloner == null) { return(obj); } object knownRef = state.GetKnownRef(obj); if (knownRef != null) { return(knownRef); } return(cloner(obj, state)); }
private static object CloneClassRoot(object obj) { if (obj == null) { return(null); } Func <object, DeepCloneState, object> cloner = (Func <object, DeepCloneState, object>)DeepClonerCache.GetOrAddClass(obj.GetType(), (Type t) => GenerateCloner(t, asObject: true)); if (cloner == null) { return(obj); } return(cloner(obj, new DeepCloneState())); }