Beispiel #1
0
        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);
        }