我正在编写一段代码,用户需要通过按"y“或"n”或写" yES“或"no”来输入他是否想要一个功能,而不检查大小写是否敏感(因此,如果用户编写YeS或YeS,它就需要工作)。
此外,如果用户写出任何无效的内容,它会说此选项无效,并再次要求用户选择一个选项。
这是它的一个抽象:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
switch(optionString)
{
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
case "Yes":
case "yes":
case "Y":
case "y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "No":
case "no":
case "N":
case "n":
FeatureIsOn = false;
optionIsValid = true;
break;
}
} while (optionIsValid != true);
}
为每种可能的方式写"yes“都有一个大小写,效率不是很高。有没有更好的方法呢?
发布于 2018-07-29 05:39:46
在检查前将要检查的字符串转换为大写或小写:
static bool FeatureIsOn { get; set;}
static void Main()
{
bool optionIsValid;
do //Loops around until the option is valid
{
Console.WriteLine();
Console.Write("Enable Feature? [Y/N]: ");
string optionString = Console.ReadLine();
// convert string to uppercase
optionString = optionString.ToUpper();
switch(optionString)
{
case "YES":
case "Y":
FeatureIsOn = true;
optionIsValid = true;
break;
case "NO":
case "N":
FeatureIsOn = false;
optionIsValid = true;
break;
default:
Console.WriteLine("Invalid option.");
optionIsValid = false;
break;
}
} while (optionIsValid != true);
}
发布于 2018-07-29 05:43:55
您可以使用像String.ToUpper()
这样的方法,然后将输入的字符串与YES、NO、Y、N进行比较(也适用于String.ToLower()
,但我不确定它是否会更快。
否则,也许一些if/else
会给出更干净的结果,但它不会在速度方面改变任何东西。
编辑:另一个选项是使用Console.Read()
而不是Console.Readline()
,这样如果用户想输入“YES”,它将只保留“Y”(它只记录一个字符),这允许您将测试除以2 ;)
发布于 2018-07-29 05:47:22
先修剪一次,然后再验证它是否包含一个有效的选项( n,y或no,yes),然后使用.contains检查y的值,找出实际的选择。这将是我的策略。
https://stackoverflow.com/questions/51575457
复制相似问题