/// <summary>
        /// Returns a list containing every item from this <see cref="QuadTree{T}"/>.
        /// </summary>
        /// <returns><see cref="ListArray{QuadTreeItem{T}}"/> containing every item.</returns>
        public ListArray <QuadTreeItem <T> > GetItems()
        {
            var items = QuadTreePool <T> .RentItemList();

            void AddToList(QuadTree <T> tree)
            {
                items.AddRange(tree.Items);
                if (tree.IsDivided)
                {
                    AddToList(tree.TopLeft);
                    AddToList(tree.TopRight);
                    AddToList(tree.BottomLeft);
                    AddToList(tree.BottomRight);
                }
            }

            AddToList(this);
            return(items);
        }
        public ListArray <QuadTreeItem <T> > Query(RectangleF range)
        {
            if (!Bounds.Intersects(range))
            {
                return(null);
            }

            var result = QuadTreePool <T> .RentItemList();

            var items = GetItems();

            foreach (var item in items)
            {
                if (range.Intersects(item.Bounds))
                {
                    result.Add(item);
                }
            }

            QuadTreePool <T> .Return(items);

            return(result);
        }