【问题标题】:C# Try Catch and return back to promptC# Try Catch 并返回提示
【发布时间】:2017-06-17 07:14:44
【问题描述】:

我有一个 try catch 块,当它捕捉到异常时,我希望它返回到 ReadLine(),以便用户可以再次尝试输入有效选择

Console.Write("CSV File: ");
string csvFile = Console.ReadLine();            
try
{
    List<DictionaryLabels> values = csvRead(csvFile);
}
catch (System.IO.FileNotFoundException)
{
    Console.WriteLine("CSV File not found \nPress any key to contiune");
    Console.ReadLine();
}

【问题讨论】:

  • 查找while循环
  • 您误用了 try catch 概念。您应该做的是检查文件是否存在,然后将其解析为“值”。
  • @Ethilium 这是一个exogenous exception;该文件总是可以在File.Exists(csvFile) 和随后的File.Read(csvFile) 之间消失或锁定。
  • @Quantic 你是对的。我习惯于使用固定文件。谢谢指正。

标签: c# error-handling console try-catch


【解决方案1】:

您对问题的解决方案可能有效,但它不遵循编程的概念。每当情况出乎意料而不是“可能发生”的情况时,都应使用 Try-catch 块。

下面的代码描述了处理此问题的一种方法:如果文件存在,您将从用户那里获得第一个输入并进行验证。确认后,您可以尝试打开它。如果失败(例如文件不包含 CSV 格式的文本),您应该抛出异常。

如果while( condition ) 中的条件不为假( !File.Exists() ),则循环将一次又一次地运行。

using System.IO;

Console.Write("Please enter the path for file:");

string lPath = Console.ReadLine();

while(!File.Exists(lPath))
{
    Console.Write("File has not been found. Please enter new path:");
    lPath = Console.ReadLine();
}


try
{
    List<DictionaryLabels> values = csvRead(lPath);
}
catch (Exception e)
{
    Console.WriteLine(e.Message);
}

【讨论】:

    【解决方案2】:
    bool valid = false
    
    while(!valid)
    {
    //Rest of the code
    }
    

    您在尝试结束时将 valid 设置为 true 并从 catch 中删除 readline(感谢 Quantic 指出我的遗漏)。

    【讨论】:

    • 并删除捕获中的Console.ReadLine();。如果你展示了一个正确的实现会更清楚。
    • 我不想展示整个实现,因为它看起来像一个家庭作业,所以我只想在正确的方向上轻推一下。
    【解决方案3】:
            Console.Write("CSV full path File: ");
            string csvFile = Console.ReadLine();
            while (!ValidateCsv(csvFile))
            {
                Console.Write("Retype full path CSV File: ");
                csvFile = Console.ReadLine();
            }
            private static bool ValidateCsv(string csvFile)
            {
               bool isPathTrue = false;
               FileInfo csvFileInfo = new FileInfo(csvFile);
               isPathTrue = csvFileInfo.Exists;
               return isPathTrue;
            }
    

    【讨论】:

      猜你喜欢
      • 2012-05-18
      • 2016-03-28
      • 2014-04-27
      • 1970-01-01
      • 2015-10-24
      • 1970-01-01
      • 2011-04-09
      • 2018-10-14
      • 1970-01-01
      相关资源
      最近更新 更多