public void MergeTwoNullExceptionPreventer () { var n1 = new NullExceptionPreventer (); var n2 = new NullExceptionPreventer (); dynamic merged = Merger.Merge (n1, n2); Assert.IsInstanceOfType (typeof(ConfigObject), merged); }
public void MergeTwoNullExceptionPreventer() { var n1 = new NullExceptionPreventer(); var n2 = new NullExceptionPreventer(); dynamic merged = Merger.Merge(n1, n2); Assert.IsInstanceOfType(typeof(ConfigObject), merged); }
/// <summary> /// If one of the objects is a NullExceptionPreventer, the other object is returned unchanged but /// as a ConfigObject /// </summary> public void MergeNullExceptionPreventer() { var n = new NullExceptionPreventer(); var c = Config.ApplyJson(@"{ ""Sample"": ""Foobar"" }", new ConfigObject()); dynamic merged; // merge left merged = Merger.Merge(c, n); Assert.IsInstanceOfType(typeof(ConfigObject), merged); Assert.That(merged.Sample == "Foobar"); // merge right merged = Merger.Merge(n, c); Assert.IsInstanceOfType(typeof(ConfigObject), merged); Assert.That(merged.Sample == "Foobar"); }
/// <summary> /// If one of the objects is a NullExceptionPreventer, the other object is returned unchanged but /// as a ConfigObject /// </summary> public void MergeNullExceptionPreventer () { var n = new NullExceptionPreventer (); var c = Config.ApplyJson (@"{ ""Sample"": ""Foobar"" }", new ConfigObject ()); dynamic merged; // merge left merged = Merger.Merge (c, n); Assert.IsInstanceOfType (typeof(ConfigObject), merged); Assert.That (merged.Sample == "Foobar"); // merge right merged = Merger.Merge (n, c); Assert.IsInstanceOfType (typeof(ConfigObject), merged); Assert.That (merged.Sample == "Foobar"); }
// all member access to a NullExceptionPreventer will return a new NullExceptionPreventer // this allows for infinite nesting levels: var s = Obj1.foo.bar.bla.blubb; is perfectly valid public override bool TryGetMember(GetMemberBinder binder, out object result) { result = new NullExceptionPreventer(); return(true); }