先看範例
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
留言列表