StackTrace: 保存方法的棧調用信息。 什麼意思呢?A方法裡調用了B方法,B方法裡調用了C方法,你調用A方法的時候StackTrace裡就大概是這樣: at Project.Class.C in c:\aaa\Project\class.cs:line 10. at Project.Class.B in c:\aaa\Project\class.cs:line 20. at Project.Class.A in c:\aaa\Project\class.cs:line 30. 它就是個字符串。 不過他有什麼用呢?你說呢,畢竟人家連行號都告訴你了。如果丟了StackTrace,我們也就丟了這些信息。 什麼情況下會丟StackTrace?看看這段代碼:
static void Main(string[] args)
{
try
{
// Call Method1
Console.WriteLine(Method1());
}
catch (Exception ex)
{
Console.WriteLine(ex.StackTrace);
}
Console.ReadLine();
}
public static int Method1()
{
try
{
return Method1_1();
}
catch (Exception ex)
{
throw ex;
}
}
public static int Method1_1()
{
int j = 0;
return 10 / j;
}
乍看貌似沒有什麼問題,但是Method1多做了一件事: Catch(Exception ex){thorw ex;} 他帶來一個後果就是,StackStace會丟. 得到的StackTrace如下: at ExceptionMethodCall.Program.Method1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 33 at ExceptionMethodCall.Program.Main(String[] args) in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 16 刪除 try..catch, 我們得到的StackTrace如下: at ExceptionMethodCall.Program.Method1_1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 40 at ExceptionMethodCall.Program.Method1() in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 29 at ExceptionMethodCall.Program.Main(String[] args) in c:\Projects\ExceptionMethodCall\ExceptionMethodCall\Program.cs:line 16 結果顯而易見。 結論:以後還亂加try..catch不了?