Как я могу позволить пользователю выбирать между, скажем, 5 элементами в любом порядке, который они пожелают в C #? - PullRequest
0 голосов
/ 01 ноября 2019

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

namespace Homework_2
{
    class Program
    {
        static void Main(string[] args)
        {

            Console.WriteLine("a-cake b-milk c-noodles d-cheese e-coke:");
            string choice = Console.ReadLine();
            switch (choice)
            {
                default:
                    break;
            }

        }
    }
}

1 Ответ

0 голосов
/ 01 ноября 2019

Похоже, что вы хотите попросить пользователя ввести несколько вариантов, а затем сделать что-то с выборами. Также кажется, что у вас есть цена / стоимость, связанная с каждым элементом, поэтому я хотел бы использовать 3-Tuple в этом случае.

var options = new List<Tuple<int, string, int>>
{
    Tuple.Create( 1, "Cake", 100 ),
    Tuple.Create( 2, "Milk", 200 ),
    Tuple.Create( 3, "Noodles", 300 ),
    Tuple.Create( 4, "Cheese", 400 ),
    Tuple.Create( 5, "Coke", 500 )
};

Первый - это выбор, который вы хотите, чтобы пользователь ввел, второй - это элементимя, а третье - цена за единицу.

Затем попросите пользователя ввести свой выбор через запятую:

Console.WriteLine("Select one or more options seperated by a comma");
foreach (var opt in options)
{
    Console.WriteLine("{0} - {1}", opt.Item2, opt.Item1);
}
var selection = Console.ReadLine();

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

var items = selection.Split(',');
foreach (var item in items)
{
    if (int.TryParse(item, out int value))
    {
        // We're looking in the 'options' list if we have the selection the user made
        var option = options.FirstOrDefault(x => x.Item1 == value);
        if (option != null)
        {
            // If it does exist, do what you want with it. Here I'm merely printing them.
            Console.WriteLine("{0} - {1} - {2}", option.Item1, option.Item2, option.Item3);
        }
    }
}
...