public void NullSafe_Returns_Leaf_Value_If_All_Objects_Along_Path_Not_Null()
        {
            // Arrange
            var foo = new Foo {Inner = new Inner{MoreInner = new MoreInner()}};

            // Act
            var result1 = foo.NullSafe(f => f.Inner);
            var result2 = foo.NullSafe(f => f.Inner.Name);
            var result3 = foo.NullSafe(f => f.Inner.GetBool());
            var result4 = foo.NullSafe(f => f.Inner.MoreInner.Age);

            // Assert
            Assert.AreEqual(foo.Inner, result1);
            Assert.AreEqual(foo.Inner.Name, result2);
            Assert.AreEqual(foo.Inner.GetBool(), result3);
            Assert.AreEqual(foo.Inner.MoreInner.Age, result4);
        }
        public void NullSafe_Returns_Default_Value_For_Leaf_If_Any_Object_Along_Path_Is_Null()
        {
            // Arrange
            var foo = new Foo();

            // Act
            var result1 = foo.NullSafe(f => f.Inner);
            var result2 = foo.NullSafe(f => f.Inner.Name);
            var result3 = foo.NullSafe(f => f.Inner.GetBool());
            var result4 = foo.NullSafe(f => f.Inner.MoreInner.Age);

            // Assert
            Assert.AreEqual(default(Foo), result1);
            Assert.AreEqual(default(string), result2);
            Assert.AreEqual(default(bool), result3);
            Assert.AreEqual(default(int), result4);
        }