我有一个多项选择方法,但有时我需要它只有 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 中,无论它是多少,我都会有很多选择,但我觉得这非常丑陋,必须有更好的解决方案。 预先感谢您!
首先你可以尝试这个
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();
}