用户选项是/否
当文件存在时,我需要向用户显示一些消息,显示消息“文件存在...是否要覆盖它?”用户选项是/否
if (File.Exists(binaryFilePath))
{
Program.DisplayMessage("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N");
string overwrite = Console.ReadLine();
while (overwrite != null)
{
if (overwrite.ToUpper() == "Y")
{
WriteBinaryFile(frameCodes, binaryFilePath);
} if (overwrite.ToUpper() == "N")
{
throw new IOException();
overwrite = null;
} if (overwrite.ToUpper() != "Y" && overwrite.ToUpper() != "N")
{
Program.DisplayMessage("!!Please Select a Valid Option!!");
overwrite = Console.ReadLine();
}
}
}
如果用户写入“Y”的过程开始并完成正常......问题是怎么可以停止? 我试着用这个,但不行...
我该怎么做?
if (File.Exists(binaryFilePath))
{
while (true)
{
Program.DisplayMessage("The file: " + binaryFileName + " already exist. Do you want to overwrite it? Y/N");
string overwrite = Console.ReadLine();
if (overwrite.ToUpper().Equals("Y"))
{
WriteBinaryFile(frameCodes, binaryFilePath);
break;
}
else if (overwrite.ToUpper().Equals("N"))
{
Console.WriteLine("Aborted by user.");
break;
}
else
{
Program.DisplayMessage("!!Please Select a Valid Option!!");
overwrite = Console.ReadLine();
continue; // not needed - for educational use only ;)
}
}
}
尝试一下,去学习你的基本知识(条件,循环,英语,...)。然后你可以回来问为什么抛出一个异常(特别是那个)在你的情况下是错误的;)
这个应用程序在控制台中,我需要一些使用EqualsIgnoreCase?不识别... – ale 2011-04-25 22:51:07
此代码应该在控制台应用程序中正常工作(尽管ataman,我认为它是'ToUpper()',而不是'toUpper()')...将其转换为大写处理案例差异;你不需要考虑这种方法的情况。其他可以用于不区分大小写的字符串比较的方法包括:overwrite.Equals(“Y”,StringComparison.CurrentCultureIgnoreCase),Overwrite.Equals(“Y”,StringComparison.InvariantCultureIgnoreCase)','string.Equals(overwrite, “Y”,StringComparison.CurrentCultureIgnoreCase);''或简单地'string.Equals(overwrite,“Y”,true);' – 2011-04-26 19:51:04
是的,ToUpper和Equals都是大写字母,我总是在java和c#之间跳转时混合起来。 – atamanroman 2011-04-26 22:20:22
尝试使用break;
打出来的循环(也使用的if-else-IF,而不是如果,如果......)
if (File.Exists(binaryFilePath))
{
while (true)
{
Program.DisplayMessage("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N");
string overwrite = Console.ReadLine();
if (overwrite.ToUpper() == "Y")
{
WriteBinaryFile(frameCodes, binaryFilePath);
break;
}
else if (overwrite.ToUpper() == "N")
{
throw new IOException();
overwrite = null;
break;
}
else if (overwrite.ToUpper() != "Y" && overwrite.ToUpper() != "N")
{
Program.DisplayMessage("!!Please Select a Valid Option!!");
overwrite = Console.ReadLine();
}
}
}
虽然 “N” 是无用的,但我希望你以后break;
处理你在其他地方抛出的异常。
你真的不需要第三个“if”。 Elses已经照顾它。抛出''''之后,你可能也不需要这两行中的任何一行。无论如何他们将无法到达。 – Timwi 2011-04-25 22:49:42
我相信,用户选择阅读应委托给另一种方法。像这样:
static void Main(string[] args)
{
//...
if (File.Exists(binaryFilePath))
{
if(ReadBool("The file: " + binaryFileName + " exist. You want to overwrite it? Y/N"))
WriteBinaryFile(frameCodes, binaryFilePath);
else
throw new IOException();
}
}
static bool ReadBool(String question)
{
while (true)
{
Console.WriteLine(question);
String r = (Console.ReadLine() ?? "").ToLower();
if (r == "y")
return true;
if (r == "n")
return false;
Console.WriteLine("!!Please Select a Valid Option!!");
}
}
请不要恢复人们的编辑。他们正在努力改进代码的格式,以使问题更具可读性并因此可以回答。 – ChrisF 2011-04-25 22:32:40
为什么你使用while循环呢?如果用户回答否,然后将覆盖设置为空,为什么会抛出异常? – esrange 2011-04-25 22:32:44
@esrange在输入有效的选项之前,它似乎是指ReadLine(),然后通过将覆盖设置为null来从循环中断开。 @ale break;是摆脱循环的方式。 – adorablepuppy 2011-04-25 22:35:26