/// <summary>
        /// Determines if the <paramref name="predicate"/> yields a match in the target <paramref name="expression"/>.
        /// </summary>
        /// <typeparam name="TExpression">The type of <see cref="Expression"/>
        /// to search for.</typeparam>
        /// <param name="expression">The <see cref="Expression"/> that represents the sub tree for which to start searching.</param>
        /// <param name="predicate">The <see cref="Func{T,TResult}"/> used to filter the result</param>
        /// <returns>A list of <see cref="Expression"/> instances that matches the given predicate.</returns>
        public static bool Contains <TExpression>(this Expression expression, Func <TExpression, bool> predicate) where TExpression : Expression
        {
            var finder = new ExpressionFinder <TExpression>();

            return(finder.Find(expression, predicate).Any());
        }
        /// <summary>
        /// Returns a list of <typeparamref name="TExpression"/> instances
        /// that matches the <paramref name="predicate"/>.
        /// </summary>
        /// <typeparam name="TExpression">The type of <see cref="Expression"/>
        /// to search for.</typeparam>
        /// <param name="expression">The <see cref="Expression"/> that represents the sub tree for which to start searching.</param>
        /// <param name="predicate">The <see cref="Func{T,TResult}"/> used to filter the result</param>
        /// <returns>A list of <see cref="Expression"/> instances that matches the given predicate.</returns>
        public static IEnumerable <TExpression> Find <TExpression>(this Expression expression, Func <TExpression, bool> predicate) where TExpression : Expression
        {
            var finder = new ExpressionFinder <TExpression>();

            return(finder.Find(expression, predicate));
        }