public static async System.Threading.Tasks.Task <R> MatchAsync <R>(this ICreateNewQuestionResult self, System.Func <QuestionPosted, System.Threading.Tasks.Task <R> > whenQuestionPosted, System.Func <QuestionNotPosted, System.Threading.Tasks.Task <R> > whenQuestionNotPosted, System.Func <QuestionValidationFailed, System.Threading.Tasks.Task <R> > whenQuestionValidationFailed)
        {
            switch ((self))
            {
            case QuestionPosted questionposted:
                return(await whenQuestionPosted(questionposted));

            case QuestionNotPosted questionnotposted:
                return(await whenQuestionNotPosted(questionnotposted));

            case QuestionValidationFailed questionvalidationfailed:
                return(await whenQuestionValidationFailed(questionvalidationfailed));

            default:
                throw new System.NotSupportedException("This switch statement should be exhaustive");
            }
        }
        public static ICreateNewQuestionResult Match(this ICreateNewQuestionResult self, System.Func <QuestionPosted, ICreateNewQuestionResult> whenQuestionPosted, System.Func <QuestionNotPosted, ICreateNewQuestionResult> whenQuestionNotPosted, System.Func <QuestionValidationFailed, ICreateNewQuestionResult> whenQuestionValidationFailed)
        {
            switch ((self))
            {
            case QuestionPosted questionposted:
                return(whenQuestionPosted(questionposted));

            case QuestionNotPosted questionnotposted:
                return(whenQuestionNotPosted(questionnotposted));

            case QuestionValidationFailed questionvalidationfailed:
                return(whenQuestionValidationFailed(questionvalidationfailed));

            default:
                throw new System.NotSupportedException("This switch statement should be exhaustive");
            }
        }