在异常处理中循环

本文关键字:循环 异常处理 | 更新日期: 2023-09-27 18:12:45

我做了一个简单的程序。我想为try, catch语句添加循环,这样如果用户写输入,他会得到一个错误消息,程序让他再写一次。

Console.WriteLine("Enter The File Location");
string userValue = Console.ReadLine();
try
{
    string content = File.ReadAllText(userValue);
    Console.WriteLine(content);            
}
catch (FileNotFoundException ex)
{
    Console.WriteLine("There was a Problem");
    Console.WriteLine(ex.Message);
}  
catch (DirectoryNotFoundException ex)
{
    Console.WriteLine("There was a Problem");
    Console.WriteLine("Could not find the Directory");
}
catch (Exception ex)
{
    Console.WriteLine(ex.Message);
}
Console.ReadLine();

在异常处理中循环

您可以将代码包装在while循环中,该循环重复代码,直到成功完成操作。

var success = false;
while (success == false)
{
    Console.WriteLine("Enter The File Location");
    string userValue = Console.ReadLine();
    try
    {
        string content = File.ReadAllText(userValue);
        Console.WriteLine(content);            
        success = true;
    }
    catch (FileNotFoundException ex)
    {
        Console.WriteLine("There was a Problem");
        Console.WriteLine(ex.Message);
    }  
    catch (DirectoryNotFoundException ex)
    {
        Console.WriteLine("There was a Problem");
        Console.WriteLine("Could not find the Directory");
    }
    catch (Exception ex)
    {
        Console.WriteLine(ex.Message);
    }    
}

当您能够检查无效输入时,通常最好这样做,而不是让异常发生。在您的情况下,您可以根据用户的输入检查File.Exists(…)和/或Directory.Exists(…)。您可以将这些作为循环语句的条件,以便继续提示用户,直到他们使用正确的目录和文件。然而,我认为这并不一定是最好的用户体验,因为您希望他们知道是一个有效的文件和目录,而他们可能并不知道。当然,您应该提供一种方法让它们退出循环。

当用户输入完成时(当您检测到Enter键或有完整的命令或其他情况时),我会使用带有指定条件的while结构。然后,您可以在不满足该条件时循环(并且没有不可恢复的错误),并使用上面的代码检查用户错误并在需要时打印消息。

不需要循环。你可以使用递归函数。试试这个:https://dotnetfiddle.net/4NR26P