/// <summary> /// Takes in the input arguments, and adds Dishes to an Order until done or error. /// </summary> /// <param name="orderStrings">input arguments. first argument is the menu name, all other arguments are dish numbers.</param> /// <returns>A new Order object, with tabulated dish counts for each dish ordered, and error information.</returns> public virtual Order FormOrder(string[] orderStrings) { Order currentOrder = new Order(); var currentMenu = _menus.FirstOrDefault(menu => string.Equals(orderStrings[0], menu.Name, StringComparison.CurrentCultureIgnoreCase)); if (currentMenu == null) { currentOrder.ErrorOccurred = true; return currentOrder; } for (int i = 1; ((i < orderStrings.Length) && (!currentOrder.ErrorOccurred)); i++) { var dishNumber = 0; var trimmedArgument = orderStrings[i].Trim(); if (Int32.TryParse(trimmedArgument, out dishNumber)) { if (!currentMenu.MenuItems.ContainsKey(dishNumber)) { currentOrder.ErrorOccurred = true; break; } var currentDish = currentMenu.MenuItems[dishNumber]; if(currentDish == null || currentDish.Name == null) { currentOrder.ErrorOccurred = true; break; } currentOrder.OrderDish(dishNumber, currentDish); } else //couldn't parse integer from the orderString { currentOrder.ErrorOccurred = true; } } return currentOrder; }