每当我将 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;