public static Variant mergeSimpleObject(Variant src, Variant dest, bool clone = false, bool cuseSrc = true) { Variant variant = new Variant(); Variant variant2 = src; bool flag = !cuseSrc; if (flag) { variant2 = dest; } if (clone) { bool isArr = src.isArr; if (isArr) { using (List <Variant> .Enumerator enumerator = src._arr.GetEnumerator()) { while (enumerator.MoveNext()) { string key = enumerator.Current; bool flag2 = dest.ContainsKey(key); if (flag2) { bool flag3 = (dest[key].isArr || dest[key].isDct) && (src[key].isArr || src[key].isDct); if (flag3) { variant[key] = GameTools.mergeSimpleObject(src[key], dest[key], false, true); } else { variant[key] = variant2[key].clone(); } } else { variant[key] = src[key].clone(); } } } } bool isDct = src.isDct; if (isDct) { foreach (string current in src.Keys) { bool flag4 = dest.ContainsKey(current); if (flag4) { bool flag5 = (dest[current].isArr || dest[current].isDct) && (src[current].isArr || src[current].isDct); if (flag5) { variant[current] = GameTools.mergeSimpleObject(src[current], dest[current], false, true); } else { variant[current] = variant2[current].clone(); } } else { variant[current] = src[current].clone(); } } } bool flag6 = dest.Count > 0; if (flag6) { foreach (string current2 in dest.Keys) { bool flag7 = variant.ContainsKey(current2); if (!flag7) { variant[current2] = dest[current2].clone(); } } } } else { bool isDct2 = src.isDct; if (isDct2) { foreach (string current3 in src.Keys) { bool flag8 = dest.ContainsKey(current3); if (flag8) { bool flag9 = (dest[current3].isArr || dest[current3].isDct) && (src[current3].isArr || src[current3].isDct); if (flag9) { variant[current3] = GameTools.mergeSimpleObject(src[current3], dest[current3], false, true); } else { variant[current3] = variant2[current3]; } } else { variant[current3] = src[current3]; } } } bool flag10 = dest.Count > 0; if (flag10) { foreach (string current4 in dest.Keys) { bool flag11 = variant.ContainsKey(current4); if (!flag11) { variant[current4] = dest[current4]; } } } } return(variant); }