用户选项是/否

用户选项是/否

问题描述:

当文件存在时,我需要向用户显示一些消息,显示消息“文件存在...是否要覆盖它?”用户选项是/否

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”的过程开始并完成正常......问题是怎么可以停止? 我试着用这个,但不行...

我该怎么做?

+1

请不要恢复人们的编辑。他们正在努力改进代码的格式,以使问题更具可读性并因此可以回答。 – ChrisF 2011-04-25 22:32:40

+3

为什么你使用while循环呢?如果用户回答否,然后将覆盖设置为空,为什么会抛出异常? – esrange 2011-04-25 22:32:44

+0

@esrange在输入有效的选项之前,它似乎是指ReadLine(),然后通过将覆盖设置为null来从循环中断开。 @ale break;是摆脱循环的方式。 – adorablepuppy 2011-04-25 22:35:26

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 ;) 
    } 
    } 
} 

尝试一下,去学习你的基本知识(条件,循环,英语,...)。然后你可以回来问为什么抛出一个异常(特别是那个)在你的情况下是错误的;)

+0

这个应用程序在控制台中,我需要一些使用EqualsIgnoreCase?不识别... – ale 2011-04-25 22:51:07

+2

此代码应该在控制台应用程序中正常工作(尽管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

+0

是的,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;处理你在其他地方抛出的异常。

+2

你真的不需要第三个“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!!"); 
      } 
     }