Как продолжать повторять инструкцию переключения C # - PullRequest
0 голосов
/ 25 июня 2018

Я пишу программу для создания списка книг, и я написал несколько методов для этой цели. Я хочу отобразить список параметров, для которых вызывается метод, а затем, как только они выберут параметр, продолжайте отображать параметры, пока они не решат выйти.

Это все, что у меня есть:

List<Book> books = new List<Book>();

switch
{
    case 1:
        CardCatalog.AddBook(books);
        break;
    case 2:
        CardCatalog.ListBooks(books);
        break;
    default:
        CardCatalog.Save(books);
        break;
}

Я уже написал методы, теперь мне просто нужно, чтобы это работало. Если они выбирают вариант 1 или 2, оператор switch должен быть повторен. Если они выбирают вариант 3, CardCatalog.Save () должен быть выполнен, а оператор switch НЕ должен повторяться.

Я бы хотел, чтобы это утверждение повторялось также каждый раз:

Console.WriteLine("1. Add a Book\n2. List all books\n3. Save and exit");

Но я не знаю, как включить его в оператор switch, или даже если оператор switch является правильным способом для этого (хотя я думаю, что это так).

1 Ответ

0 голосов
/ 25 июня 2018

Определите переменную string с именем option. Он будет хранить опцию, которую вводит пользователь. И внутри цикла while, предложите пользователю выбрать опцию и сохранить ее в option. Выполните вычисления (до и внутри оператора switch). Продолжайте делать это до тех пор, пока ввод не станет одной из предопределенных клавиш (в данном случае 1 и 2).

Пример кода может выглядеть следующим образом:

string option = "1"; // Make sure we enter the while loop
while (option == "1" || option == "2")
{
    Console.WriteLine("1. Add a Book\n2. List all books\n3. Save and exit");
    option = Console.ReadLine();

    List<Book> books = new List<Book>(); // Do optional computation here

    switch (option)
    {
        case "1":
            CardCatalog.AddBook(books);
            break;
        case "2":
            CardCatalog.ListBooks(books);
            break;
        default:
            CardCatalog.Save(books);
            break;
    }
}

Если вы поймете суть, вот как я бы это сделал:

while (true)
{
    Console.WriteLine("1. Add a Book\n2. List all books\n3. Save and exit");
    string option = Console.ReadLine();
    if (!Int32.TryParse(option, out int optionAsInt))
    {
        Console.WriteLine("Enter an integer");
        continue;
    }

    List<Book> books = new List<Book>(); // Do optional computation here

    if (optionAsInt == 1)
        CardCatalog.AddBook(books);
    else if (optionAsInt == 2)
        CardCatalog.ListBooks(books);
    else
    {
        CardCatalog.Save(books);
        break;
    }
}
...