如何在C#中制作动态多项选择方法?

问题描述 投票:0回答:1

我有一个多项选择方法,但有时我需要它只有 2 个选项,但有时需要 3、4 甚至 5 个。我想创建一个动态方法,它接受应该有多少个选项的 int,并且是用户可以选择的选项数量。因此,如果我用 int 为 2 调用该函数,则只有 2 个选择,但如果我用 4 调用它,则将有 4 个。

这是我想要实现的代码,以便您可以看到。

string OptionChoice(int howManyOptions)
{
    bool optionChosenIsValid = false;
    char optionChosen;

    // If howManyOptions is 2, it should be like this ↓

    do
    {
        Console.Write("\n\nMelyik opciót választod? (Nyomd meg az 'A' vagy 'B' billentyűt!) ");
        optionChosen = Console.ReadKey().KeyChar;
        switch (optionChosen)
        {
            case 'a':
            case 'A':
                optionChosenIsValid = true;
                break;

            case 'b':
            case 'B':
                optionChosenIsValid = true;
                break;

            default:
                Console.Write("\nIlyen opció nincsen, kérlek próbáld újra!");
                break;
        }
    } while (!optionChosenIsValid);

    Console.WriteLine($"\n({optionChosen.ToString().ToUpper()}) lehetőség kiválasztva");


    //But if howManyOptions is for example 4, it should be like this ↓

    do
    {
        Console.Write("\n\nMelyik opciót választod? (Nyomd meg az 'A', 'B', 'C' vagy 'D' billentyűt!) ");
        optionChosen = Console.ReadKey().KeyChar;
        switch (optionChosen)
        {
            case 'a':
            case 'A':
                optionChosenIsValid = true;
                break;

            case 'b':
            case 'B':
                optionChosenIsValid = true;
                break;

            case 'c':
            case 'C':
                optionChosenIsValid = true;
                break;

            case 'd':
            case 'D':
                optionChosenIsValid = true;
                break;

            default:
                Console.Write("\nIlyen opció nincsen, kérlek próbáld újra!");
                break;
        }
    } while (!optionChosenIsValid);

    Console.WriteLine($"\n({optionChosen.ToString().ToUpper()}) lehetőség kiválasztva");

    return optionChosen.ToString().ToUpper();
}

我知道我可以将 howManyOptions int 放入 switch case 中,无论它是多少,我都会有很多选择,但我觉得这非常丑陋,必须有更好的解决方案。 预先感谢您!

c# methods dynamic multiple-choice
1个回答
0
投票

首先你可以尝试这个

  1. 根据传递给函数的“howManyOptions”数量动态生成控制台日志。
  2. 再次使用动态循环检查所选选项是否在可接受的范围内。
string OptionChoice(int howManyOptions)
{
    bool optionChosenIsValid = false;
    char optionChosen;


    do
{
    Console.Write($"\n\nMelyik opciót választod? (Nyomd meg az ");
    
    // Construct your options list with this loop
    for (int i = 0; i < howManyOptions; i++)
    {
        char optionKey = (char)('A' + i);
        Console.Write($"'{optionKey}'{(i < howManyOptions - 1 ? ", " : "")}");
    }

    Console.Write(" billentyűt!) ");
    
    optionChosen = Console.ReadKey().KeyChar;
    
    // similarly check if the chosen operation is within the option range you expect it to be
    for (int i = 0; i < howManyOptions; i++)
    {
        char optionKey = (char)('A' + i);
        if (char.ToUpper(optionChosen) == optionKey)
        {
            optionChosenIsValid = true;
            break;
        }
    }

    if (!optionChosenIsValid)
    {
        Console.Write("\nIlyen opció nincsen, kérlek próbáld újra!");
    }

} while (!optionChosenIsValid);

Console.WriteLine($"\n({optionChosen.ToString().ToUpper()}) lehetőség kiválasztva");
    return optionChosen.ToString().ToUpper();
}
© www.soinside.com 2019 - 2024. All rights reserved.