internal static object CloneClassInternal(object obj, DeepCloneState state) { if (obj == null) { return(null); } var cloner = (Func <object, DeepCloneState, object>)DeepClonerCache.GetOrAddClass(obj.GetType(), t => GenerateCloner(t, true)); // safe ojbect if (cloner == null) { return(obj); } // loop var knownRef = state.GetKnownRef(obj); if (knownRef != null) { return(knownRef); } return(cloner(obj, state)); }
internal static object CloneClassInternal(object obj, DeepCloneState state) { if (obj == null) { return(null); } Func <object, DeepCloneState, object> func = (Func <object, DeepCloneState, object>)DeepClonerCache.GetOrAddClass(obj.GetType(), (Type t) => GenerateCloner(t, true)); if (func == null) { return(obj); } object knownRef = state.GetKnownRef(obj); if (knownRef != null) { return(knownRef); } return(func(obj, state)); }