There three kind of catch ... throw method:
catch(Exception e)
{
throw e;
}
catch(Exception)
{
throw;
}
catch
{
throw;
}The last two method are the same, while the first is different.
The first method will swallow down the exception's StackTrace
Example:
1
class Class1
2
{
3
[STAThread]
4
static void Main(string[] args)
5
{
6
try
7
{
8
Class1 app = new Class1();
9
app.fun();
10
}
11
catch (System.Exception e)
12
{
13
Console.WriteLine(e.StackTrace);
14
}
15
Console.ReadLine();
16
}
17
18
void fun()
19
{
20
try
21
{
22
throwE();
23
}
24
catch(Exception)
25
{
26
throw;
27
}
28
}
29
void throwE()
30
{
31
throw new Exception("my Exception");
32
}
33
}
class Class12
{3
[STAThread]4
static void Main(string[] args)5
{6
try7
{8
Class1 app = new Class1();9
app.fun();10
}11
catch (System.Exception e)12
{13
Console.WriteLine(e.StackTrace);14
}15
Console.ReadLine();16
}17
18
void fun()19
{20
try21
{22
throwE();23
}24
catch(Exception)25
{26
throw;27
}28
}29
void throwE()30
{31
throw new Exception("my Exception");32
}33
}the result is:
at ConsoleApplication1.Class1.throwE()
at ConsoleApplication1.Class1.fun()
at ConsoleApplication1.Class1.Main(String[] args)
if we change the fun() to :
1
void fun()
2
{
3
try
4
{
5
throwE();
6
}
7
catch(Exception e)
8
{
9
throw e;
10
}
11
}
void fun()2
{3
try4
{5
throwE();6
}7
catch(Exception e)8
{9
throw e;10
}11
}the result is:
at ConsoleApplication1.Class1.fun()
at ConsoleApplication1.Class1.Main(String[] args)
we lose the true throw exception trace, so avoid "throw e"

浙公网安备 33010602011771号