/// <summary>
        /// Creates <see langword="default"/> case
        /// </summary>
        /// <param name="expression"></param>
        /// <typeparam name="TR"></typeparam>
        /// <returns></returns>
        public SwitchBuilder <T, TR> Default <TR>(ExpressionContainer <TR> expression)
        {
            var switchBuilder = new SwitchBuilder <T, TR>(Value)
            {
                Cases          = Cases,
                ComparerMethod = ComparerMethod,
                DefaultCase    = DefaultCase
            };

            return(switchBuilder.Default(expression));
        }
        /// <summary>
        /// Creates <see langword="default"/> case
        /// </summary>
        /// <param name="builder"></param>
        /// <typeparam name="TR"></typeparam>
        /// <returns></returns>
        public SwitchBuilder <T, TR> Default <TR>(Action <ExpressionContainer <T>, BlockBuilder> builder)
        {
            var switchBuilder = new SwitchBuilder <T, TR>(Value)
            {
                Cases          = Cases,
                ComparerMethod = ComparerMethod,
                DefaultCase    = DefaultCase
            };

            return(switchBuilder.Default(builder));
        }
        /// <summary>
        /// Creates new <see langword="case"/> expression for values specified in <paramref name="testValues"/>
        /// </summary>
        /// <param name="builder"></param>
        /// <param name="testValues"></param>
        /// <typeparam name="TR"></typeparam>
        /// <returns></returns>
        public SwitchBuilder <T, TR> Case <TR>(Action <ExpressionContainer <T>, BlockBuilder> builder, params ExpressionContainer <T>[] testValues)
        {
            var switchBuilder = new SwitchBuilder <T, TR>(Value)
            {
                Cases          = Cases,
                ComparerMethod = ComparerMethod,
                DefaultCase    = DefaultCase
            };

            return(switchBuilder.Case(builder, testValues));
        }