try catch里能否內嵌try catch?答案是肯定的。但是等內層try catch出異常之后是個什么執行順序呢?看下面代碼
static void Main(string[] args)
{
try
{
Console.WriteLine("----------------------外層try------------------------------");
errorMethod();
}
catch (Exception ex)
{
Console.WriteLine("----------------------外層catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------外層finally------------------------------");
}
Console.ReadKey();
}
private static void errorMethod()
{
try
{
Console.WriteLine("----------------------內層try------------------------------");
int i = 0;
int a = 100/i;
}
catch (Exception ex)
{
Console.WriteLine("----------------------內層catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------內層finally------------------------------");
}
}

內層catch處理了異常,所以沒有執行外層catch。
咱們把內層的catch注釋掉 再試下
static void Main(string[] args)
{
try
{
Console.WriteLine("----------------------外層try------------------------------");
errorMethod();
}
catch (Exception ex)
{
Console.WriteLine("----------------------外層catch" + ex.Message + "------------------------------");
}
finally {
Console.WriteLine("----------------------外層finally------------------------------");
}
Console.ReadKey();
}
private static void errorMethod()
{
try
{
Console.WriteLine("----------------------內層try------------------------------");
int i = 0;
int a = 100/i;
}
//catch (Exception ex)
//{
// Console.WriteLine("----------------------內層catch" + ex.Message + "------------------------------");
//}
finally {
Console.WriteLine("----------------------內層finally------------------------------");
}
}

很明顯,外層catch捕獲了異常。
總結:try catch嵌套,內層不能捕獲時,會考慮外層內否捕獲,內層能捕獲,則外層catch不執行。
try
{
//A
try
{
//B
}
catch
{
//C
}
finally
{
//D
}
//E
}
catch
{
//F
}
finally
{
//G
}
上面的代碼 執行順序
拋出異常在:內層A,E處由外層catch塊捕獲,並執行外層finally
拋出異常在:內層B處,且有一合適內層catch捕獲,執行內層finally,后執行E處
拋出異常在:內層B處,但內層catch塊沒有合適處理程序,執行內層finally,搜索外層catch,找合適的,執行外層finally,此時不會執行E
拋出異常在:內層C處,退出內層catch塊,執行內層finally,搜索外層catch,找到合適,執行外層finally
拋出異常在:內層D處,退出內層finally塊,搜索外層catch,找到合適,執行外層finally
A拋異常 A=》F=》G
B拋異常 C能捕獲 B=》C=》D=》E=》F=》G (若C處無法捕獲B=》F=》G)
C拋異常 C=》F=》G
D拋異常 D=》F=》G
E拋異常 A=》F=》G 同A
另外 try{}catch{} 中未做捕獲類型限定,可捕獲所以異常。如 try{}catch(IOException ex){} 則catch只能捕獲I/O操作引發的異常。
(文章摘自--http://www.cnblogs.com/zhangchengye/p/5674240.html)

