private void ParseParameters(List <string> input) { if (input != null && input.Count > 0) { var list = new List <IParameter>(); var nodes = new List <string>(input); foreach (var node in nodes) { if (node.StartsWith(CLIConstants.DParameterPrefix)) { IParameter param; if (node.Contains("=")) { param = _objectsFactory.GetParameter(node.Substring(CLIConstants.DParameterPrefix.Length, node.IndexOf("=") - 2)); if (param.RequiresArgument) { param.Argument = node.Substring(node.IndexOf("=") + 1); } else { throw new InvalidCommandException(ErrorCodes.InvalidParameter, $"The {param.Name} parameter does not accept arguments."); } } else { param = _objectsFactory.GetParameter(node.Substring(CLIConstants.DParameterPrefix.Length)); if (param.RequiresArgument) { throw new InvalidCommandException(ErrorCodes.InvalidParameter, $"The {param.Name} parameter requires argument."); } } list.Add(param); input.Remove(node); } else if (node.StartsWith("-")) { list.AddRange(node.Skip(1).Select(c => _objectsFactory.GetParameter(c.ToString()))); input.Remove(node); } } if (list.Any()) { _command.AddParameters(list); } } else if (_command.RequiresParameters) { throw new InvalidCommandException(ErrorCodes.CommandRequiresParameter, $"{_command.Name} command requires at least one parameter."); } }