1

我正在尝试找到一种更智能的方法来允许用户从遇到错误的位置重试或继续,并且我知道 Exception 类中的堆栈跟踪提供了一些有关错误发生位置的信息,有什么方法可以尝试时间旅行也许在我告诉用户做某事之后回到错误行?

编辑:


从我所见,VB 似乎有类似On Error Resume Next. 我想我正在寻找与此类似的东西,但可以为 C# 手动处理。

4

2 回答 2

0

据我了解,您正在寻找一种管理异常的方法,而且这个话题真的很复杂......关于时间旅行机器,VS-Ultimate 中有智能跟踪,除了我真的看不到它的好处从最终用户的角度来看。例如,假设您上传了一个文件,但由于某种原因上传失败,让用户重试更新可能会很好,但这个机会必须由您在代码中管理,例如 try/catch以及您在 catch 中重新启动上传的逻辑...但是我真的不知道任何通用方法来尝试/捕获所有内容并允许用户重试,而且,恕我直言,最好这样。如果是业务异常,您知道如何管理它。如果是技术问题,

于 2013-08-10T22:14:47.650 回答
0

异常显示代码中断的位置,但这并不意味着它是引入错误的位置。

例如:

var someString = "";  // Assumed someString will always be nonnull
someString = DoSomeWork();  // OOPS! Due to a bug, this returns null in some cases.
Console.WriteLine(someString.Length);

错误出现在第三行,但错误的来源(或格式错误的用户输入等)在前一行。

反而:

在代码中选择显式恢复点,如果出现问题,您可以在其中重新启动并将其包装在 try/catch+loop 中。在用户输入格式错误的情况下:

do
{
    try
    {
        var input = Console.ReadLine();
        var myNumber = Int32.Parse(input);
        DoSomethingWithNumber(myNumber);

        break;
    }
    catch(Exception e)
    {
        // Optional error handling, explain the error,
        // tell the user to retry, logging, etc.
        // If possible, catch something more specific
        // than Exception (like ArgumentException, 
        // FormatException, etc.).
    }
} while(true);

On Error Resume Next,虽然它可能偶尔使用,但太容易被滥用,所以我确信它故意不包含在.Net中。

于 2013-08-10T23:15:30.747 回答