从参数化操作中获取异常的行数



每当我将 Action作为一个被声明为内联的参数传递时,当抛出异常时,我就不会得到正确的行号。例如,如果我声明此功能:

public static void Do(Action action)
{
    //do some things
    action();
    //do some things
}

然后这样称呼:

Helper.Do(() => {
   int x = 1;
   x++;
   x = x / 0;
   x--;
});

返回的例外将引用线Helper.Do(() => {,该行不会告诉我哪个线丢弃了实际错误。是否可以在使用此模式时检索正确的行号?

我已经测试了您的代码,并在发生Exception的位置获得了确切的行号。这是我的测试代码:

static void Main(string[] args)
    {
        try
        {
            Helper.Do(() => {
                int x = 1;
                x++;
                x = x / 0;
                x--;
            });
        }
        catch (Exception e)
        {
            Console.WriteLine(e);
            throw;
        }
}

e.Message = "Attempted divide by zero"

e.StackTrace = at ConsoleApplication1.Program.<>c.<Main>b__1_0() in C:testConsoleApplication1ConsoleApplication1Program.cs:line 46 at ConsoleApplication1.Helper.Do(Action action) in C:testtestConsoleApplication1ConsoleApplication1Helper.cs:line 14 at ConsoleApplication1.Program.Main(String[] args) in C:testtestConsoleApplication1ConsoleApplication1Program.cs:line 43

StackTrace的第46行是x = x / 0;

最新更新