/// <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); } }