#c# #console
Вопрос:
В Шоумене вариант 3-выйти, но приложение не выйдет полностью.Похоже, что он возвращает оператор else из пункта меню get. Не знаю почему. Если вы запустите приложение, вы увидите.
using System; using System.Collections.Generic; using System.IO; using System.Linq; using System.Net.Http; using System.Text.Json; namespace NFLReportsApp { class Program { static void Main(string[] args) { var searchFile = new ReadFromFile(); var searchEngine = new PlayerSearchEngine(); // searchEngine.Initialize(); var keepSearching = true; while (keepSearching) { ShowMenu(); var option = GetMenuOption(); switch (option) { case 1: var allPlayers = searchEngine.GetAllPlayers(); DisplayPlayers(allPlayers); break; case 2: var searchName = GetPlayerSearchName(); var matchingPlayer = searchEngine.SearchPlayers(searchName); DisplayPlayers(matchingPlayer); break; case 3: var searchText = GetTextSearch(); var matchingFile = searchFile.SearchFiles(searchText); break; case 4: keepSearching = false; return; } } } private static object GetTextSearch() { throw new NotImplementedException(); } public static void DisplayPlayers(Listlt;DisplayPlayersgt; allPlayers) { if (allPlayers.Count == 0) { Console.WriteLine("No players found."); } var i = 0; foreach (var player in allPlayers) { Console.WriteLine($"{ i}) {player.strPlayer}"); } } public static string GetPlayerSearchName() { while (true) { Console.WriteLine("Enter a players name:"); var searchName = Console.ReadLine(); if (!string.IsNullOrWhiteSpace(searchName)) { return searchName; } else { Console.WriteLine($"Invalid player name {searchName}"); } } } public static object GetMenuOption() { while (true) { var input = Console.ReadLine(); if (Int32.TryParse(input, out var option)) { return option; } else { Console.WriteLine($"Invalid solution {option}"); } } } public static void ShowMenu() { var reader = new ReadFromFile(); var engine = new PlayerSearchEngine(); var keepSearching = true; while (keepSearching) { Console.WriteLine("Type: Search NFL Player, Cleveland Browns or Quit?"); var action = Console.ReadLine(); if (action == "Search NFL Player") { Console.WriteLine("Which player would you like to search for?"); var Name = Console.ReadLine(); engine.SearchPlayers(Name); engine.GetAllPlayers(); } else if (action == "Cleveland Browns") { reader.ReadFromText(); } else if (action == "Quit") { keepSearching = false; } else { //IS THERE A WAY TO ADD PLAYERS NAME TO CODE BELOW SO IT RETURNS INVALID Console.WriteLine(action " is not a valid command"); } } } } }
Комментарии:
1. Идеальное время, чтобы научиться пользоваться отладчиком и ознакомиться с программой по мере ее выполнения. Вариант 3 не выглядит так, как будто он что-то отменяет.
GetMenuOption
вероятно, следует возвращать целое число, а не объект.2. Во всяком случае, кажется, что вариант 4 выйдет из цикла / вернется из main. Вы уверены, что вариант 3-это «бросить курить», а не вариант 4?
3. Мне придется попробовать отладчик, не думайте, что я слишком хорошо знаком с ним @LarsTech
4. Это вариант, о котором я говорю, который, кажется, выходит, но он не работает } иначе, если (действие == «Выйти») { keepSearching = ложь; } @FrederikHoeft
5. Вам все равно придется нажать «4». «Выйти» выводит вас только из дочернего цикла, а не из родительского. Каждая
keepSearching
переменная локальна для своих собственных блоков кода.