|
三.關(guān)于異常捕獲機(jī)制
雖然我們已經(jīng)很辛苦了,但是仍然有很多原因使代碼運(yùn)行失敗,如引用null引用、索引越界、內(nèi)存溢出、類型轉(zhuǎn)換失敗等等。這就需要我們的代碼有足夠的容錯(cuò)能力,在代碼運(yùn)行失敗時(shí),及時(shí)、主動(dòng)的處理這些異常。
● 機(jī)制分析
.NET 中基本的異常捕獲與處理機(jī)制是由try…catch…finally塊來(lái)完成的,它們分別完成了異常的監(jiān)測(cè)、捕獲與處理工作。一個(gè)try塊可以對(duì)應(yīng)零個(gè)或多個(gè)catch塊,可以對(duì)應(yīng)零個(gè)或一個(gè)finally塊。不過(guò)沒(méi)有catch的try似乎沒(méi)有什么意義,如果try對(duì)應(yīng)了多個(gè)catch,那么監(jiān)測(cè)到異常后,CLR會(huì)自上而下搜索catch塊的代碼,并通過(guò)異常過(guò)濾器篩選對(duì)應(yīng)的異常,如果沒(méi)有找到,那么CLR將沿著調(diào)用堆棧,向更高層搜索匹配的異常,如果已到堆棧頂部依然沒(méi)有找到對(duì)應(yīng)的異常,就會(huì)拋出未處理的異常了,這時(shí)catch塊中的代碼并不會(huì)被執(zhí)行。所以距離try最近的catch塊將最先被遍歷到。
以下代碼:

try
{
Convert.ToInt32("Try");
}
catch (FormatException ex1)
{
string CatchFormatException = "CatchFormatException";
}
catch (NullReferenceException ex2)
{
string CatchNullReferenceException = "CatchNullReferenceException";
}
finally
{
string Finally = "Finally";
}
NET技術(shù):.Net Discovery系列之-深入理解平臺(tái)機(jī)制與性能影響(下),轉(zhuǎn)載需保留來(lái)源!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。