Всякий раз, когда пользователь выбирает вариант 3 «Выйти», он не выйдет полностью из основного цикла. Любая помощь будет признательна. Спасибо

#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 переменная локальна для своих собственных блоков кода.