C#中try-catch代碼塊的使用機(jī)制
?try-catch代碼塊是C#中用于異常處理的核心機(jī)制。異常是在程序執(zhí)行過程中可能出現(xiàn)的錯誤,而try-catch代碼塊允許您在執(zhí)行代碼時捕獲并處理這些異常。
一、基礎(chǔ)結(jié)構(gòu)
try
{
//可能拋出異常的代碼
}
catch (ArgumentException ex)
{
//處理特定異常
}
catch (Exception ex)
{
//處理其他異常
}
finally
{
//無論是否存在異常最終都會執(zhí)行,可選
}
二、關(guān)鍵字詳解
1、try
- 包裹可能拋出異常的代碼
- 必須存在,后接catch或finally,或者二者都有
2、catch
- 捕獲異常
- 按順序執(zhí)行
catch (ArgumentException ex)
{
Console.WriteLine("參數(shù)異常:",ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("其他異常:", ex.Message);
}
3、finally
- 無論是否發(fā)生異常,都會執(zhí)行
- 常用來釋放資源(關(guān)閉文件、數(shù)據(jù)庫連接等)
- 無異常時執(zhí)行順序 try→finally
- 存在異常時執(zhí)行順序 try-catch-finally
三、關(guān)鍵特性
1、繼承
- 派生自 System.Exception
- 常見內(nèi)置異常:
- 空引用:NullReferenceException
- 文件未找到:FileNotFoundException
2、拋出異常
catch (Exception ex)
{
//使用 throw,而不是 throw ex,拋出原始異常
throw;
}
3、異常篩選器 when(C# 6.0+)
使用when關(guān)鍵字篩選異常
catch (IOException ex) when (ex.Message.Contains("正在使用"))
{
Console.WriteLine("文件被占用");
}
四、使用
1、適用場景
- 數(shù)據(jù)庫訪問
- 文件/網(wǎng)絡(luò) I/O 操作
2、避免濫用
- 不要過度使用異常
異常處理是用于處理真正的異常情況的,而不應(yīng)該被用于控制程序流程。過多的異常處理會影響性能和代碼可讀性 - 不用使用空的catch塊
捕獲到的異常至少應(yīng)該記錄錯誤信息,以便于調(diào)試和故障排除。可以使用日志記錄庫或輸出到控制臺 - 不要捕獲所有異常
避免在一個大的catch塊中捕獲所有異常,這會導(dǎo)致難以定位問題。根據(jù)異常類型提供適當(dāng)?shù)奶幚?/li> - 使用特定的異常類型
盡量使用特定的異常類型捕獲和處理異常,這樣可以更準(zhǔn)確地針對不同類型的錯誤提供不同的處理邏輯 - 自定義異常類
在需要時,可以創(chuàng)建自定義異常類,以提供更有意義的異常信息和處理方式。有助于調(diào)試和錯誤處理
五、常見錯誤
- 捕獲順序錯誤:將 catch (Exception) 放在具體異常之前
- 忽略異常:空的 catch 塊導(dǎo)致靜默失敗
- ?資源泄漏:忘記在 finally 中關(guān)閉文件/連接
六、示例
try
{
var txt = File.ReadAllLines("tangshi.txt");
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"文件未找到: {ex.FileName}");
}
catch (IOException ex) when (ex.Message.Contains("正在使用"))
{
Console.WriteLine("文件被占用");
}
catch (Exception ex)
{
Console.WriteLine($"未知錯誤: {ex.Message}");
}
finally
{
Console.WriteLine("清理完成");
}
到此這篇關(guān)于C#中try-catch代碼塊的使用機(jī)制的文章就介紹到這了,更多相關(guān)C# try-catch代碼塊內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C#?WPF實(shí)現(xiàn)播放音頻文件的示例詳解
這篇文章主要為大家詳細(xì)介紹了利用C#?WPF實(shí)現(xiàn)播放音頻文件的相關(guān)知識,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
算法證明每一位都相同十進(jìn)制數(shù)不是完全平方數(shù)
這篇文章主要為大家介紹了算法證明每一位都相同十進(jìn)制數(shù)不是完全平方數(shù)的過程論述,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-05-05
c# 托盤雙擊不觸發(fā)單擊事件的實(shí)現(xiàn)方法
在開發(fā)winform的時候我發(fā)現(xiàn),當(dāng)執(zhí)行雙擊操作(notifyIcon1_MouseDoubleClick)時,會同時伴隨著單擊事件(notifyIcon1_MouseClick)的發(fā)生。。那如何才能使雙擊事件不觸發(fā)單擊事件呢?2009-02-02
Unity3D利用DoTween實(shí)現(xiàn)卡牌翻轉(zhuǎn)效果
這篇文章主要為大家詳細(xì)介紹了Unity3D利用DoTween實(shí)現(xiàn)卡牌翻轉(zhuǎn)效果,具有一定的參考價值,感興趣的小伙伴們可以參考一下2019-02-02
C#實(shí)現(xiàn)給PDF文檔設(shè)置過期時間
我們可以給一些重要文檔或者臨時文件設(shè)置過期時間和過期信息提示來提醒讀者或管理者文檔的時效性,并及時對文檔進(jìn)行調(diào)整、更新等。下面本文將介紹如何通過C#來給PDF文檔設(shè)置過期時間的方法。需要的可以參考一下2022-01-01
C# 調(diào)用WebApi的實(shí)現(xiàn)
這篇文章主要介紹了C# 調(diào)用WebApi的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-04-04

