コード例 #1
0
        public void CloneToJaggedClassArray()
        {
            var source = new[]
            {
                new[] { new CloneTestClass {
                            FirstName = "John", LastName = "Doe"
                        } },
                new[] { new CloneTestClass {
                            FirstName = "Jane", LastName = "Smith"
                        } }
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[]
            {
                new[] { dest1 },
                new[] { dest2 }
            };

            source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, destination[0][0]));
            Assert.IsTrue(ReferenceEquals(dest2, destination[1][0]));

            Assert.AreEqual("John", destination[0][0].FirstName);
            Assert.AreEqual("Doe", destination[0][0].LastName);

            Assert.AreEqual("Jane", destination[1][0].FirstName);
            Assert.AreEqual("Smith", destination[1][0].LastName);
        }
コード例 #2
0
        public void ShallowCloneToJaggedClassArray()
        {
            var source1 = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };
            var source2 = new CloneTestClass {
                FirstName = "Jane", LastName = "Smith"
            };

            var source = new[]
            {
                new[] { source1 },
                new[] { source2 }
            };

            var destination = new[]
            {
                new[] { new CloneTestClass() },
                new[] { new CloneTestClass() }
            };

            source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0][0]));
            Assert.IsTrue(ReferenceEquals(source2, destination[1][0]));
        }
コード例 #3
0
        public void ShallowCloneToMultidimentionalClassArray()
        {
            var source1 = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };
            var source2 = new CloneTestClass {
                FirstName = "Jane", LastName = "Smith"
            };

            CloneTestClass[,] source = new[, ]
            {
                {
                    source1,
                    source2
                }
            };

            var destination = new[, ]
            {
                {
                    new CloneTestClass(),
                    new CloneTestClass()
                }
            };

            source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0, 0]));
            Assert.IsTrue(ReferenceEquals(source2, destination[0, 1]));
        }
コード例 #4
0
        public void ShallowCloneToJaggedStructArray()
        {
            var source1 = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };
            var source2 = new CloneTestClass {
                FirstName = "Jane", LastName = "Smith"
            };

            var source = new[]
            {
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = source1
                        } },
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = source2
                        } }
            };

            var destination = new[]
            {
                new[] { new CloneTestStructWithClonableClassField() },
                new[] { new CloneTestStructWithClonableClassField() }
            };

            var clone = source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0][0].TestClass));
            Assert.IsTrue(ReferenceEquals(source2, destination[1][0].TestClass));
        }
コード例 #5
0
        public void ShallowCloneToClassArrayOfDifferingLengthsWillNotWork()
        {
            var source      = new CloneTestClass[2];
            var destination = new CloneTestClass[3];

            Assert.Throws <InvalidOperationException>(() => Cloneable <CloneTestClass[]> .ShallowCloneTo(source, destination));
        }
コード例 #6
0
ファイル: Program.cs プロジェクト: cnxinan/PrivateStore
        static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            Console.WriteLine("Please input what you want to show!");

            if (args != null && args.Any())
            {
                Console.WriteLine($"Hello World:{args[0]}");
            }

            //use $ to format string of gettting input

            /* var input = Console.ReadLine();
             * Console.WriteLine($"Hello World:{input}"); */

            //use stack
            string firstStr  = "it is the first string";
            string secondStr = "it is the first string";

            Stack stack = new Stack();

            stack.Push(firstStr);
            stack.Push(secondStr);

            Console.WriteLine($"The first element is {stack.Pop()}, second element is {stack.Pop()}");

            //serialize
            CloneTestClass ali = new CloneTestClass()
            {
                Name = "Ali", Age = 20
            };

            var tencent = (CloneTestClass)Clone.DeepClone(ali);

            Console.WriteLine($"Before change Ali:Name is{ali.Name} and Age is {ali.Age}");
            Console.WriteLine($"Before change Tencent:Name is{tencent.Name} and Age is {tencent.Age}");
            tencent.Age  = 30;
            tencent.Name = "Tencent";
            Console.WriteLine($"After change Ali:Name is{ali.Name} and Age is {ali.Age}");
            Console.WriteLine($"After change Tencent:Name is{tencent.Name} and Age is {tencent.Age}");

            try
            {
                var mayBeException = Clone.DeepClone(new SeriClassB()
                {
                    Name = "Test"
                });
            }
            catch
            {
                Console.WriteLine($"SeriClassB can't be serialize cause SeriClassA don't have the attribute Serializeable!");
            }
        }
コード例 #7
0
        public void ShallowCloneToClass()
        {
            var source = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };
            var destination = new CloneTestClass();

            Cloneable <CloneTestClass> .ShallowCloneTo(source, destination);

            Assert.AreEqual(source.FirstName, destination.FirstName);
            Assert.AreEqual(source.LastName, destination.LastName);
        }
コード例 #8
0
        public void ShallowCloneToClassArray()
        {
            var destinationClass = new CloneTestClass();

            var source = new[] { new CloneTestClass {
                                     FirstName = "John", LastName = "Doe"
                                 } };
            var destination = new[] { destinationClass };

            Cloneable <CloneTestClass[]> .ShallowCloneTo(source, destination);

            Assert.IsTrue(ReferenceEquals(source[0], destination[0]));
        }
コード例 #9
0
        public void CloneMultidimensionalClassArray()
        {
            CloneTestClass[,] source = new CloneTestClass[, ]
            {
                {
                    new CloneTestClass {
                        FirstName = "John", LastName = "Doe"
                    },
                    new CloneTestClass {
                        FirstName = "Jane", LastName = "Smith"
                    }
                }
            };

            source[0, 1].InnerClass = source[0, 1];

            Assert.IsTrue(Cloneable <CloneTestClass[, ]> .CanClone());
            Assert.IsTrue(Cloneable <CloneTestClass[, ]> .CanShallowClone());

            var clone = Cloneable <CloneTestClass[, ]> .Clone(source);

            var shallowClone = Cloneable <CloneTestClass[, ]> .ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClone));

            Assert.AreEqual(source.Length, clone.Length);
            Assert.AreEqual(source.Length, shallowClone.Length);

            Assert.IsFalse(object.ReferenceEquals(source[0, 0], clone[0, 0]));
            Assert.IsFalse(object.ReferenceEquals(source[0, 1], clone[0, 1]));
            Assert.IsFalse(object.ReferenceEquals(source[0, 1], clone[0, 1].InnerClass));
            Assert.IsTrue(object.ReferenceEquals(clone[0, 1], clone[0, 1].InnerClass));

            Assert.IsTrue(object.ReferenceEquals(source[0, 0], shallowClone[0, 0]));
            Assert.IsTrue(object.ReferenceEquals(source[0, 1], shallowClone[0, 1]));
            Assert.IsTrue(object.ReferenceEquals(source[0, 1], shallowClone[0, 1].InnerClass));
            Assert.IsFalse(object.ReferenceEquals(clone[0, 1], shallowClone[0, 1].InnerClass));

            Assert.AreEqual("John", clone[0, 0].FirstName);
            Assert.AreEqual("Doe", clone[0, 0].LastName);

            Assert.AreEqual("Jane", clone[0, 1].FirstName);
            Assert.AreEqual("Smith", clone[0, 1].LastName);

            Assert.AreEqual("John", shallowClone[0, 0].FirstName);
            Assert.AreEqual("Doe", shallowClone[0, 0].LastName);

            Assert.AreEqual("Jane", shallowClone[0, 1].FirstName);
            Assert.AreEqual("Smith", shallowClone[0, 1].LastName);
        }
コード例 #10
0
        public void CloneSelfReferencingClass()
        {
            var source = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            source.InnerClass = source;

            var clone = Cloneable<CloneTestClass>.Clone(source);
            var shallowClone = Cloneable<CloneTestClass>.ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClone));

            Assert.IsTrue(object.ReferenceEquals(clone, clone.InnerClass));
            Assert.IsTrue(object.ReferenceEquals(shallowClone, shallowClone.InnerClass));
        }
コード例 #11
0
        public void CloneStructWithSelfReferencingClass()
        {
            var selfRefClass = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            selfRefClass.InnerClass = selfRefClass;

            var source = new StructWithReferenceToSelfReferencingClass {Class = selfRefClass};

            var clone = Cloneable<StructWithReferenceToSelfReferencingClass>.Clone(source);
            var shallowClone = Cloneable<StructWithReferenceToSelfReferencingClass>.ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source.Class, clone.Class));
            Assert.IsTrue(object.ReferenceEquals(source.Class, shallowClone.Class));

            Assert.IsTrue(object.ReferenceEquals(clone.Class, clone.Class.InnerClass));
        }
コード例 #12
0
        public void ShallowCloneToWillAValueType()
        {
            var testClass = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            var source = new CloneTestStructWithClonableClassField {
                TestClass = testClass
            };
            var dest = new CloneTestStructWithClonableClassField {
                TestClass = new CloneTestClass()
            };

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(testClass, clone.TestClass));
        }
コード例 #13
0
        public void CloneSelfReferencingClass()
        {
            var source = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            source.InnerClass = source;

            var clone = Cloneable <CloneTestClass> .Clone(source);

            var shallowClone = Cloneable <CloneTestClass> .ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClone));

            Assert.IsTrue(object.ReferenceEquals(clone, clone.InnerClass));
            Assert.IsTrue(object.ReferenceEquals(shallowClone, shallowClone.InnerClass));
        }
コード例 #14
0
        public void CloneClass()
        {
            var source = new CloneTestClass { FirstName = "John", LastName = "Doe" };

            Assert.IsTrue(Cloneable<CloneTestClass>.CanClone());
            Assert.IsTrue(Cloneable<CloneTestClass>.CanShallowClone());

            var clone = Cloneable<CloneTestClass>.Clone(source);
            var shallowClone = Cloneable<CloneTestClass>.ShallowClone(source);

            Assert.IsFalse(ReferenceEquals(source, clone));
            Assert.IsFalse(ReferenceEquals(source, shallowClone));

            Assert.AreEqual("John", clone.FirstName);
            Assert.AreEqual("Doe", clone.LastName);

            Assert.AreEqual("John", shallowClone.FirstName);
            Assert.AreEqual("Doe", shallowClone.LastName);
        }
コード例 #15
0
        public void CloneJaggedClassArray()
        {
            var source = new CloneTestClass[][]
            {
                new CloneTestClass[]
                {
                    new CloneTestClass {
                        FirstName = "John", LastName = "Doe"
                    },
                    new CloneTestClass {
                        FirstName = "Jane", LastName = "Smith"
                    }
                }
            };

            Assert.IsTrue(Cloneable <CloneTestClass[][]> .CanClone());
            Assert.IsTrue(Cloneable <CloneTestClass[][]> .CanShallowClone());

            var clone = Cloneable <CloneTestClass[][]> .Clone(source);

            var shallowClone = Cloneable <CloneTestClass[][]> .ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClone));

            Assert.IsFalse(object.ReferenceEquals(source[0], clone[0]));
            Assert.IsFalse(object.ReferenceEquals(source[0][0], clone[0][0]));
            Assert.IsFalse(object.ReferenceEquals(source[0][1], clone[0][1]));

            Assert.IsTrue(object.ReferenceEquals(source[0], shallowClone[0]));
            Assert.IsTrue(object.ReferenceEquals(source[0][0], shallowClone[0][0]));
            Assert.IsTrue(object.ReferenceEquals(source[0][1], shallowClone[0][1]));

            Assert.AreEqual(source.Length, clone.Length);
            Assert.AreEqual(source.Length, shallowClone.Length);

            Assert.AreEqual("John", clone[0][0].FirstName);
            Assert.AreEqual("Doe", clone[0][0].LastName);
            Assert.AreEqual("Jane", clone[0][1].FirstName);
            Assert.AreEqual("Smith", clone[0][1].LastName);
        }
コード例 #16
0
        public void CloneStructWithSelfReferencingClass()
        {
            var selfRefClass = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            selfRefClass.InnerClass = selfRefClass;

            var source = new StructWithReferenceToSelfReferencingClass {
                Class = selfRefClass
            };

            var clone = Cloneable <StructWithReferenceToSelfReferencingClass> .Clone(source);

            var shallowClone = Cloneable <StructWithReferenceToSelfReferencingClass> .ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source.Class, clone.Class));
            Assert.IsTrue(object.ReferenceEquals(source.Class, shallowClone.Class));

            Assert.IsTrue(object.ReferenceEquals(clone.Class, clone.Class.InnerClass));
        }
コード例 #17
0
        public void CloneToJaggedStructArray()
        {
            var source = new[]
            {
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = new CloneTestClass {
                                FirstName = "John", LastName = "Doe"
                            }
                        } },
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = new CloneTestClass {
                                FirstName = "Jane", LastName = "Smith"
                            }
                        } }
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[]
            {
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = dest1
                        } },
                new[] { new CloneTestStructWithClonableClassField {
                            TestClass = dest2
                        } }
            };

            var clone = source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, clone[0][0].TestClass));
            Assert.IsTrue(ReferenceEquals(dest2, clone[1][0].TestClass));

            Assert.AreEqual("John", clone[0][0].TestClass.FirstName);
            Assert.AreEqual("Doe", clone[0][0].TestClass.LastName);

            Assert.AreEqual("Jane", clone[1][0].TestClass.FirstName);
            Assert.AreEqual("Smith", clone[1][0].TestClass.LastName);
        }
コード例 #18
0
        public void CloneMultipleReferencesToSameArray()
        {
            var child = new CloneTestClass[]
            {
                new CloneTestClass(),
                new CloneTestClass()
            };

            var source = new CloneTestClass[][]
            {
                child,
                child
            };

            var clone = Cloneable <CloneTestClass[][]> .Clone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(clone[0], child));
            Assert.IsFalse(object.ReferenceEquals(clone[1], child));

            Assert.IsTrue(object.ReferenceEquals(clone[0], clone[1]));
        }
コード例 #19
0
        public void CloneClass()
        {
            var source = new CloneTestClass {
                FirstName = "John", LastName = "Doe"
            };

            Assert.IsTrue(Cloneable <CloneTestClass> .CanClone());
            Assert.IsTrue(Cloneable <CloneTestClass> .CanShallowClone());

            var clone = Cloneable <CloneTestClass> .Clone(source);

            var shallowClone = Cloneable <CloneTestClass> .ShallowClone(source);

            Assert.IsFalse(ReferenceEquals(source, clone));
            Assert.IsFalse(ReferenceEquals(source, shallowClone));

            Assert.AreEqual("John", clone.FirstName);
            Assert.AreEqual("Doe", clone.LastName);

            Assert.AreEqual("John", shallowClone.FirstName);
            Assert.AreEqual("Doe", shallowClone.LastName);
        }
コード例 #20
0
        public void CloneBidirectionalReferences()
        {
            var left  = new CloneTestClass();
            var right = new CloneTestClass();

            left.InnerClass  = right;
            right.InnerClass = left;

            var leftClone = Cloneable <CloneTestClass> .Clone(left);

            var rightClone = leftClone.InnerClass;

            Assert.IsFalse(object.ReferenceEquals(right, rightClone));
            Assert.IsFalse(object.ReferenceEquals(rightClone.InnerClass, left));
            Assert.IsTrue(object.ReferenceEquals(rightClone.InnerClass, leftClone));

            leftClone = Cloneable <CloneTestClass> .ShallowClone(left);

            rightClone = leftClone.InnerClass;

            Assert.IsTrue(object.ReferenceEquals(right, rightClone));
            Assert.IsTrue(object.ReferenceEquals(rightClone.InnerClass, left));
            Assert.IsFalse(object.ReferenceEquals(rightClone.InnerClass, leftClone));
        }
コード例 #21
0
        public void CloneToMultidimentionalClassArray()
        {
            CloneTestClass[,] source = new[, ]
            {
                {
                    new CloneTestClass {
                        FirstName = "John", LastName = "Doe"
                    },
                    new CloneTestClass {
                        FirstName = "Jane", LastName = "Smith"
                    }
                }
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[, ]
            {
                {
                    dest1,
                    dest2
                }
            };

            source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, destination[0, 0]));
            Assert.IsTrue(ReferenceEquals(dest2, destination[0, 1]));

            Assert.AreEqual("John", destination[0, 0].FirstName);
            Assert.AreEqual("Doe", destination[0, 0].LastName);

            Assert.AreEqual("Jane", destination[0, 1].FirstName);
            Assert.AreEqual("Smith", destination[0, 1].LastName);
        }
コード例 #22
0
        public void ShallowCloneToJaggedClassArray()
        {
            var source1 = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            var source2 = new CloneTestClass { FirstName = "Jane", LastName = "Smith" };

            var source = new[]
            {
                new[] {source1},
                new[] {source2}
            };

            var destination = new[]
            {
                new[] {new CloneTestClass()}, 
                new[] {new CloneTestClass()}
            };

            source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0][0]));
            Assert.IsTrue(ReferenceEquals(source2, destination[1][0]));
        }
コード例 #23
0
        public void ShallowCloneToClass()
        {
            var source = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            var destination = new CloneTestClass();

            Cloneable<CloneTestClass>.ShallowCloneTo(source, destination);

            Assert.AreEqual(source.FirstName, destination.FirstName);
            Assert.AreEqual(source.LastName, destination.LastName);
        }
コード例 #24
0
        public void CloneMultidimensionalClassArray()
        {
            CloneTestClass[,] source = new CloneTestClass[,]
            {
                {
                    new CloneTestClass { FirstName = "John", LastName = "Doe" },
                    new CloneTestClass { FirstName = "Jane", LastName = "Smith"}
                }
            };

            source[0, 1].InnerClass = source[0, 1];

            Assert.IsTrue(Cloneable<CloneTestClass[,]>.CanClone());
            Assert.IsTrue(Cloneable<CloneTestClass[,]>.CanShallowClone());

            var clone = Cloneable<CloneTestClass[,]>.Clone(source);
            var shallowClone = Cloneable<CloneTestClass[,]>.ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClone));

            Assert.AreEqual(source.Length, clone.Length);
            Assert.AreEqual(source.Length, shallowClone.Length);

            Assert.IsFalse(object.ReferenceEquals(source[0, 0], clone[0, 0]));
            Assert.IsFalse(object.ReferenceEquals(source[0, 1], clone[0, 1]));
            Assert.IsFalse(object.ReferenceEquals(source[0, 1], clone[0, 1].InnerClass));
            Assert.IsTrue(object.ReferenceEquals(clone[0, 1], clone[0, 1].InnerClass));

            Assert.IsTrue(object.ReferenceEquals(source[0, 0], shallowClone[0, 0]));
            Assert.IsTrue(object.ReferenceEquals(source[0, 1], shallowClone[0, 1]));
            Assert.IsTrue(object.ReferenceEquals(source[0, 1], shallowClone[0, 1].InnerClass));
            Assert.IsFalse(object.ReferenceEquals(clone[0, 1], shallowClone[0, 1].InnerClass));

            Assert.AreEqual("John", clone[0, 0].FirstName);
            Assert.AreEqual("Doe", clone[0, 0].LastName);

            Assert.AreEqual("Jane", clone[0, 1].FirstName);
            Assert.AreEqual("Smith", clone[0, 1].LastName);

            Assert.AreEqual("John", shallowClone[0, 0].FirstName);
            Assert.AreEqual("Doe", shallowClone[0, 0].LastName);

            Assert.AreEqual("Jane", shallowClone[0, 1].FirstName);
            Assert.AreEqual("Smith", shallowClone[0, 1].LastName);
        }
コード例 #25
0
        public void ShallowCloneToClassArray()
        {
            var destinationClass = new CloneTestClass();

            var source = new[] { new CloneTestClass { FirstName = "John", LastName = "Doe" } };
            var destination = new[] { destinationClass };

            Cloneable<CloneTestClass[]>.ShallowCloneTo(source, destination);

            Assert.IsTrue(ReferenceEquals(source[0], destination[0]));
        }
コード例 #26
0
        public void CloneMultipleReferencesToSameArray()
        {
            var child = new CloneTestClass[]
            {
                new CloneTestClass(),
                new CloneTestClass()
            };

            var source = new CloneTestClass[][]
            {
                child,
                child
            };

            var clone = Cloneable<CloneTestClass[][]>.Clone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clone));
            Assert.IsFalse(object.ReferenceEquals(clone[0], child));
            Assert.IsFalse(object.ReferenceEquals(clone[1], child));

            Assert.IsTrue(object.ReferenceEquals(clone[0], clone[1]));
        }
コード例 #27
0
        public void ShallowCloneToClassArrayOfDifferingLengthsWillNotWork()
        {
            var source = new CloneTestClass[2];
            var destination = new CloneTestClass[3];

            Assert.Throws<InvalidOperationException>(() => Cloneable<CloneTestClass[]>.ShallowCloneTo(source, destination));
        }
コード例 #28
0
        public void CloneClassArray()
        {
            var source = new CloneTestClass[]
            {
                new CloneTestClass { FirstName = "John", LastName = "Doe" },
                new CloneTestClass { FirstName = "Jane", LastName = "Smith"}
            };

            Assert.IsTrue(Cloneable<CloneTestClass[]>.CanClone());
            Assert.IsTrue(Cloneable<CloneTestClass[]>.CanShallowClone());

            var clones = Cloneable<CloneTestClass[]>.Clone(source);
            var shallowClones = Cloneable<CloneTestClass[]>.ShallowClone(source);

            Assert.IsFalse(object.ReferenceEquals(source, clones));
            Assert.IsFalse(object.ReferenceEquals(source, shallowClones));

            Assert.AreEqual(source.Length, clones.Length);
            Assert.AreEqual(source.Length, shallowClones.Length);

            Assert.IsFalse(object.ReferenceEquals(source[0], clones[0]));
            Assert.IsFalse(object.ReferenceEquals(source[1], clones[1]));

            Assert.IsTrue(object.ReferenceEquals(source[0], shallowClones[0]));
            Assert.IsTrue(object.ReferenceEquals(source[1], shallowClones[1]));

            Assert.AreEqual("John", clones[0].FirstName);
            Assert.AreEqual("Doe", clones[0].LastName);

            Assert.AreEqual("Jane", clones[1].FirstName);
            Assert.AreEqual("Smith", clones[1].LastName);
        }
コード例 #29
0
        public void ShallowCloneToJaggedStructArray()
        {
            var source1 = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            var source2 = new CloneTestClass { FirstName = "Jane", LastName = "Smith" };

            var source = new[]
            {
                new[] {new CloneTestStructWithClonableClassField { TestClass = source1}},
                new[] {new CloneTestStructWithClonableClassField { TestClass = source2}}
            };

            var destination = new[]
            {
                new[] {new CloneTestStructWithClonableClassField()}, 
                new[] {new CloneTestStructWithClonableClassField()}
            };

            var clone = source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0][0].TestClass));
            Assert.IsTrue(ReferenceEquals(source2, destination[1][0].TestClass));
        }
コード例 #30
0
        public void CloneToMultidimentionalClassArray()
        {
            CloneTestClass[,] source = new[,]
            {
                {
                    new CloneTestClass { FirstName = "John", LastName = "Doe" },
                    new CloneTestClass { FirstName = "Jane", LastName = "Smith"}
                }
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[,]
            {
                {
                    dest1,
                    dest2
                }
            };

            source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, destination[0, 0]));
            Assert.IsTrue(ReferenceEquals(dest2, destination[0, 1]));

            Assert.AreEqual("John", destination[0, 0].FirstName);
            Assert.AreEqual("Doe", destination[0, 0].LastName);

            Assert.AreEqual("Jane", destination[0, 1].FirstName);
            Assert.AreEqual("Smith", destination[0, 1].LastName);
        }
コード例 #31
0
        public void ShallowCloneToWillAValueType()
        {
            var testClass = new CloneTestClass {FirstName = "John", LastName = "Doe"};

            var source = new CloneTestStructWithClonableClassField { TestClass = testClass };
            var dest = new CloneTestStructWithClonableClassField {TestClass = new CloneTestClass()};

            var clone = source.ShallowCloneTo(dest);

            Assert.IsTrue(ReferenceEquals(testClass, clone.TestClass));
        }
コード例 #32
0
        public void CloneToJaggedClassArray()
        {
            var source = new[]
            {
                new[] {new CloneTestClass { FirstName = "John", LastName = "Doe" }},
                new[] {new CloneTestClass { FirstName = "Jane", LastName = "Smith"}}
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[]
            {
                new[] {dest1}, 
                new[] {dest2}
            };

            source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, destination[0][0]));
            Assert.IsTrue(ReferenceEquals(dest2, destination[1][0]));

            Assert.AreEqual("John", destination[0][0].FirstName);
            Assert.AreEqual("Doe", destination[0][0].LastName);

            Assert.AreEqual("Jane", destination[1][0].FirstName);
            Assert.AreEqual("Smith", destination[1][0].LastName);
        }
コード例 #33
0
        public void CloneBidirectionalReferences()
        {
            var left = new CloneTestClass();
            var right = new CloneTestClass();

            left.InnerClass = right;
            right.InnerClass = left;

            var leftClone = Cloneable<CloneTestClass>.Clone(left);
            var rightClone = leftClone.InnerClass;

            Assert.IsFalse(object.ReferenceEquals(right, rightClone));
            Assert.IsFalse(object.ReferenceEquals(rightClone.InnerClass, left));
            Assert.IsTrue(object.ReferenceEquals(rightClone.InnerClass, leftClone));

            leftClone = Cloneable<CloneTestClass>.ShallowClone(left);
            rightClone = leftClone.InnerClass;

            Assert.IsTrue(object.ReferenceEquals(right, rightClone));
            Assert.IsTrue(object.ReferenceEquals(rightClone.InnerClass, left));
            Assert.IsFalse(object.ReferenceEquals(rightClone.InnerClass, leftClone));
        }
コード例 #34
0
        public void ShallowCloneToMultidimentionalClassArray()
        {
            var source1 = new CloneTestClass { FirstName = "John", LastName = "Doe" };
            var source2 = new CloneTestClass { FirstName = "Jane", LastName = "Smith" };

            CloneTestClass[,] source = new[,]
            {
                {
                    source1,
                    source2
                }
            };

            var destination = new[,]
            {
                {
                    new CloneTestClass(),
                    new CloneTestClass()
                }
            };

            source.ShallowCloneTo(destination);

            Assert.IsTrue(ReferenceEquals(source1, destination[0, 0]));
            Assert.IsTrue(ReferenceEquals(source2, destination[0, 1]));
        }
コード例 #35
0
        public void CloneToJaggedStructArray()
        {
            var source = new[]
            {
                new[] {new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "John", LastName = "Doe" }}},
                new[] {new CloneTestStructWithClonableClassField { TestClass = new CloneTestClass { FirstName = "Jane", LastName = "Smith"}}}
            };

            var dest1 = new CloneTestClass();
            var dest2 = new CloneTestClass();

            var destination = new[]
            {
                new[] {new CloneTestStructWithClonableClassField { TestClass = dest1}}, 
                new[] {new CloneTestStructWithClonableClassField { TestClass = dest2}}
            };

            var clone = source.CloneTo(destination);

            Assert.IsTrue(ReferenceEquals(dest1, clone[0][0].TestClass));
            Assert.IsTrue(ReferenceEquals(dest2, clone[1][0].TestClass));

            Assert.AreEqual("John", clone[0][0].TestClass.FirstName);
            Assert.AreEqual("Doe", clone[0][0].TestClass.LastName);

            Assert.AreEqual("Jane", clone[1][0].TestClass.FirstName);
            Assert.AreEqual("Smith", clone[1][0].TestClass.LastName);
        }