Ejemplo n.º 1
0
        /// <summary>
        /// Attempts to get the value of a <see cref="CommandOption"/> given the target <paramref name="type"/>.
        /// </summary>
        public static object GetValue(this CommandOption option, Type type)
        {
            switch (option.OptionType)
            {
            case CommandOptionType.NoValue when type == typeof(bool):
                return(option.HasValue());

            case CommandOptionType.SingleValue:
            case CommandOptionType.SingleOrNoValue:
                if (!option.HasValue())
                {
                    return(null);
                }

                var parsedValue = option.GetType().GetProperty(nameof(CommandOption <object> .ParsedValue));
                var value       = parsedValue?.GetValue(option) ?? option.Value();
                return(value != null && type.IsAssignableFrom(value.GetType())
                        ? value
                        : null);

            case CommandOptionType.MultipleValue:
                var parsedValues = option.GetType().GetProperty(nameof(CommandOption <object> .ParsedValues));
                var values       = parsedValues?.GetValue(option) ?? option.Values;
                return(type.IsAssignableFrom(values.GetType())
                        ? values
                        : null);

            default:
                return(null);
            }
        }