private object[] GetArguments(ConsoleCommand executableCommand)
        {
            var parameters = new object[executableCommand.ArgumentCount];

            if (arguments.Count < executableCommand.ArgumentCount)
            {
                throw new InvalidOperationException("Not enough number of arguments.");
            }

            for (byte i = 0; i < executableCommand.ArgumentCount; i++)
            {
                if (!ParsingUtility.TryParse(arguments[i], executableCommand.GetArgumentType(i), out var parsedParameter))
                {
                    throw new InvalidCastException($"Could not correctly parse the argument {arguments[i]} as {executableCommand.GetArgumentType(i)}.");
                }

                parameters[i] = parsedParameter;
            }

            return(parameters);
        }
        private static bool TryConvertToCommand(this MethodInfo mi, out ConsoleCommand command)
        {
            var parameters      = mi.GetParameters();
            var parametersCount = parameters.Length;

            if (parametersCount > ConsoleCommand.MAX_SUPPORTED_ARGUMENTS)
            {
                command = null;
                return(false);
            }

            for (var i = 0; i < parametersCount; i++)
            {
                if (ConsoleCommand.IsTypeSupported(parameters[i].ParameterType))
                {
                    continue;
                }
                command = null;
                return(false);
            }

            command = new ConsoleCommand(mi, parameters);
            return(true);
        }