/// <summary>
        /// Enumerates an <see cref="ILogical"/> and its descendants in the logical tree.
        /// </summary>
        /// <param name="logical">The logical.</param>
        /// <returns>The logical and its ancestors.</returns>
        public static IEnumerable <ILogical> GetSelfAndLogicalDescendants(this ILogical logical)
        {
            yield return(logical);

            foreach (var descendent in logical.GetLogicalDescendants())
            {
                yield return(descendent);
            }
        }