Esempio n. 1
0
        private static object Clone(this object instance, VisitedGraph visited, object copy)
        {
            if (visited.ContainsKey(instance))
            {
                return(visited[instance]);
            }
            else
            {
                visited.Add(instance, copy);
            }

            Type type = instance.GetType();

            while (type != null)
            {
                foreach (FieldInfo field in type.GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
                {
                    object value = field.GetValue(instance);
                    if (visited.ContainsKey(value))
                    {
                        field.SetValue(copy, visited[value]);
                    }
                    else
                    {
                        field.SetValue(copy, value.Clone(visited));
                    }
                }

                type = type.BaseType;
            }
            return(copy);
        }
Esempio n. 2
0
        private static object Clone(this object instance, VisitedGraph visited, object copy)
        {
            visited.Add(instance, copy);

            foreach (
                FieldInfo field in
                instance.GetType().GetFields(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance))
            {
                object value = field.GetValue(instance);
                if (visited.ContainsKey(value))
                {
                    field.SetValue(copy, visited[value]);
                }
                else
                {
                    field.SetValue(copy, value.Clone(visited));
                }
            }
            return(copy);
        }