throw ex vs throw
2015年1月22日 星期四
寫了這麼久的程式,都沒特別注意到這二者的差別
簡單來說throw 會多一項原始執行錯誤行號。
throw exresets the stack trace (so your errors would appear to originate fromHandleException)throwdoesn't - the original offender would be preserved.
static void Main(string[] args) {
try {
ThrowException1(); // line 19
} catch (Exception x) {
Console.WriteLine("Exception 1:");
Console.WriteLine(x.StackTrace);
}
try {
ThrowException2(); // line 25
} catch (Exception x) {
Console.WriteLine("Exception 2:");
Console.WriteLine(x.StackTrace);
}
}
private static void ThrowException1() {
try {
DivByZero(); // line 34
} catch {
throw; // line 36
}
}
private static void ThrowException2() {
try {
DivByZero(); // line 41
} catch (Exception ex) {
throw ex; // line 43
}
}
private static void DivByZero() {
int x = 0;
int y = 1 / x; // line 49
}
輸出結果
Exception 1(throw):
at UnitTester.Program.DivByZero() in\Dev\UnitTester\Program.cs:line 49
at UnitTester.Program.ThrowException1() in\Dev\UnitTester\Program.cs:line 36
at UnitTester.Program.TestExceptions() in\Dev\UnitTester\Program.cs:line 19
Exception 2(throw ex):
at UnitTester.Program.ThrowException2() in\Dev\UnitTester\Program.cs:line 43
at UnitTester.Program.TestExceptions() in\Dev\UnitTester\Program.cs:line 25
at UnitTester.Program.DivByZero() in
at UnitTester.Program.ThrowException1() in
at UnitTester.Program.TestExceptions() in
Exception 2(throw ex):
at UnitTester.Program.ThrowException2() in
at UnitTester.Program.TestExceptions() in
0 意見:
張貼留言