public object BuildInput(Queue <string> tokens, ICommandCreator creator) { var model = creator.CreateModel(_inputType); var responding = new List <ITokenHandler>(); while (tokens.Any()) { var handler = _handlers.FirstOrDefault(h => h.Handle(model, tokens)); if (handler == null) { throw new InvalidUsageException("Unknown argument or flag for value " + tokens.Peek()); } responding.Add(handler); } if (!IsValidUsage(responding)) { throw new InvalidUsageException(); } return(model); }