public bool AnyReferenceEquals(WeakReferenceTestObject other)
		{
			if (object.ReferenceEquals(this, other)) return true;
			if (object.ReferenceEquals(this.Parent, other.Parent) && !object.ReferenceEquals(this.Parent, null)) return true;
			if (object.ReferenceEquals(this.Children, other.Children) && !object.ReferenceEquals(this.Children, null)) return true;
			if (this.Children.Zip(other.Children, (a, b) => a.AnyReferenceEquals(b)).Contains(true)) return true;
			return false;
		}
Exemplo n.º 2
0
        void ICloneExplicit.CopyDataTo(object target, ICloneOperation operation)
        {
            operation.HandleObject(this, target);

            // If the source objects parent was cloned as well, assign its
            // cloned instance to our target object.
            WeakReferenceTestObject testTarget = target as WeakReferenceTestObject;

            testTarget.Parent = operation.GetWeakTarget(this.Parent);
        }
Exemplo n.º 3
0
 public bool AnyReferenceEquals(WeakReferenceTestObject other)
 {
     if (object.ReferenceEquals(this, other))
     {
         return(true);
     }
     if (object.ReferenceEquals(this.Parent, other.Parent) && !object.ReferenceEquals(this.Parent, null))
     {
         return(true);
     }
     if (object.ReferenceEquals(this.Children, other.Children) && !object.ReferenceEquals(this.Children, null))
     {
         return(true);
     }
     if (this.Children.Zip(other.Children, (a, b) => a.AnyReferenceEquals(b)).Contains(true))
     {
         return(true);
     }
     return(false);
 }
Exemplo n.º 4
0
		[Test] public void WeakReferenceBehavior()
		{
			WeakReferenceTestObject data = new WeakReferenceTestObject(new[]
			{
				new WeakReferenceTestObject(),
				new WeakReferenceTestObject(new[]
				{
					new WeakReferenceTestObject(),
					new WeakReferenceTestObject()
				})
			});
			WeakReferenceTestObject dataPart = data.Children[1];

			// Clone the full graph and see if its complete
			{
				WeakReferenceTestObject dataResultFull = data.DeepClone();
				Assert.AreSame(null, dataResultFull.Parent);
				Assert.AreEqual(2, dataResultFull.Children.Count);
				Assert.AreEqual(2, dataResultFull.Children[1].Children.Count);
				Assert.IsTrue(dataResultFull.CheckChildIntegrity());
				Assert.IsFalse(data.AnyReferenceEquals(dataResultFull));
			}

			// Clone part of the graph and see if the right parts are missing
			{
				WeakReferenceTestObject dataResultPart = dataPart.DeepClone();
				Assert.AreSame(null, dataResultPart.Parent);
				Assert.AreEqual(2, dataResultPart.Children.Count);
				Assert.IsTrue(dataResultPart.CheckChildIntegrity());
				Assert.IsFalse(dataPart.AnyReferenceEquals(dataResultPart));
			}
		}