先看範例

public class program
{
    static void Main()
    {
        try
        {
            try
            {
                throw new DirectoryNotFoundException("innerexception");
            }
            catch(Exception ex)
            {
                throw new FileNotFoundException("current exception",ex);
            }
        }
        catch (FileNotFoundException exception)
        {
            Console.WriteLine("Current Exception is {0}", exception.GetType().Name);
            if (exception.InnerException != null)
            {
                Console.WriteLine("InnerException is {0}",exception.InnerException.GetType().Name);
            }
        }
    }
}

try是把有exception疑慮的程式放在區塊內,黃色假設程式執行時發生了DirectoryNotFoundException,這時會被橘色的catch捕捉到,綠色表示在exception處理中發生了另一個exception,

這時新的exception就會把舊的exception蓋掉了,所以我們在觸發綠色的exception時加上了灰色的ex物件,它就是innerexception,

綠色的exception會被藍色的catch捕捉住,這時我們可以用exception.InnerException來取出前一個exception的錯誤資訊,避免exception資訊遺失.

這裡有個地方要注意的,就是取用innerException時記得要判斷不為null,不然它就會再跳一個Null Reference Exception

arrow
arrow
    創作者介紹
    創作者 痞客興 的頭像
    痞客興

    痞客興的部落格

    痞客興 發表在 痞客邦 留言(0) 人氣()