public void Path_GetAllNestedValuesThenProperty()
        {
            var target = new WithChildren
            {
                ValueA = 1,
                ValueB = new WithChildren
                {
                    ValueA = 2,
                    ValueB = 3,
                    ValueC = 4
                },
                ValueC = new WithChildren
                {
                    ValueA = new WithChildren
                    {
                        ValueA = new WithChildren
                        {
                            ValueA = new WithChildren
                            {
                                ValueA = 5
                            }
                        }
                    }
                }
            };
            // "*" doesn't return the root object itself, so we only return children of root
            // and only ValueA (then we filter by int) to get 2, 5
            var result = target.Path("*.ValueA").Where(x => x != null).OfType <int>().ToList();

            result.Should().BeEquivalentTo(2, 5);
        }
        public void Path_GetAllNestedValues()
        {
            var target = new WithChildren
            {
                ValueA = 1,
                ValueB = new WithChildren
                {
                    ValueA = 2,
                    ValueB = 3,
                    ValueC = 4
                },
                ValueC = new WithChildren
                {
                    ValueA = new WithChildren
                    {
                        ValueA = new WithChildren
                        {
                            ValueA = new WithChildren
                            {
                                ValueA = 5
                            }
                        }
                    }
                }
            };
            var result = target.Path("*").Where(x => x != null).OfType <int>().ToList();

            result.Should().BeEquivalentTo(1, 2, 3, 4, 5);
        }