示例#1
0
        internal static T GetValueOrDefault <T>(this ArgumentConversionResult result)
        {
            switch (result)
            {
            case SuccessfulArgumentConversionResult successful:
                return((T)successful.Value !);

            case FailedArgumentConversionResult failed:
                throw new InvalidOperationException(failed.ErrorMessage);

            case NoArgumentConversionResult _:
                return(default !);

            default:
                return(default !);
            }
        }
示例#2
0
        internal static ArgumentConversionResult ConvertIfNeeded(
            this ArgumentConversionResult conversionResult,
            SymbolResult symbolResult,
            Type toType)
        {
            if (conversionResult is null)
            {
                throw new ArgumentNullException(nameof(conversionResult));
            }

            switch (conversionResult)
            {
            case SuccessfulArgumentConversionResult successful when !toType.IsInstanceOfType(successful.Value):
                return(ConvertObject(
                           conversionResult.Argument,
                           toType,
                           successful.Value));

            case SuccessfulArgumentConversionResult successful
                when toType == typeof(object) && conversionResult.Argument.Arity.MaximumNumberOfValues > 1 &&
                successful.Value is string:
                return(ConvertObject(
                           conversionResult.Argument,
                           typeof(IEnumerable <string>),
                           successful.Value));

            case NoArgumentConversionResult _ when toType == typeof(bool):
                return(Success(conversionResult.Argument, true));

            case NoArgumentConversionResult _ when conversionResult.Argument.Arity.MinimumNumberOfValues > 0:
                return(new MissingArgumentConversionResult(
                           conversionResult.Argument,
                           ValidationMessages.Instance.RequiredArgumentMissing(symbolResult)));

            case NoArgumentConversionResult _ when conversionResult.Argument.Arity.MaximumNumberOfValues > 1:
                return(Success(
                           conversionResult.Argument,
                           Array.Empty <string>()));

            default:
                return(conversionResult);
            }
        }
示例#3
0
 internal static object?GetValueOrDefault(this ArgumentConversionResult result) =>
 result.GetValueOrDefault <object?>();