欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

C# 正確使用異常的 6 條原則

admin
2025年3月11日 0:17 本文熱度 379

前言

編程的世界充滿了挑戰和樂趣,異常就是我們繞不過去的大石頭。

有時候,我們需要主動引發一些異常;

有時候,我們又需要主動捕捉一些異常;

有時候,我們還需要學會消滅一些異常;

……

所以,我們需要一套異常使用原則來幫助我們穩住船舶,不讓意外攪亂了我們的編程節奏!

今天,我們就來聊聊六個關于異常使用的黃金法則,幫助你在這個充滿挑戰的領域中游刃有余。

六大原則

1. 不要對在可控范圍內的輸入和輸出引發異常

這個原則的意思是,

在編寫代碼時,如果某些輸入或輸出是你可以預見并且可以控制的,就不要引發異常。

想象一下,你正在編寫一個計算器應用程序。

用戶輸入了兩個數字,你準備進行除法運算。如果用戶輸入的除數是零,你會怎么做?拋出異常嗎?

不!在這種情況下,你可以簡單地返回一個錯誤消息,或者提示用戶重新輸入。

因為,用戶輸入零是可控的,沒必要大驚小怪。

public int Divide(int a, int b)
{
    if (b == 0
    {
        Console.WriteLine("分母不能為零,請檢查輸入!");
        return 0// 或者其他合理的默認值
    }
    return a / b;
}
2. 正常的業務流程盡可能不要使用異常來處理

假設你正在編寫一個電商網站的訂單處理系統。

如果用戶嘗試購買一個已經售罄的商品,你會拋出異常嗎?

當然不!

你可以簡單地返回一個“商品已售罄”的消息,或者將用戶引導到其他商品頁面,因為這是一個正常的業務邏輯。

異常是用來處理意外情況的,而不是用來處理正常的業務流程。

// 錯誤示范
try
{
    var result = GetProductById(productId);

catch (NullReferenceException ex) 
{
    // 處理商品不存在的情況
}

// 更好的做法
var product = GetProductById(productId);
if (product == null)
{
    Console.WriteLine("當前商品已售罄");

    // 引導到其他商品頁面
}
3. 不要總是嘗試去捕獲異常,允許異常往上傳播

假設你正在編寫一個底層的文件處理程序。

如果文件讀取失敗,你需要立即捕獲異常并處理嗎?不一定!

有時候,讓異常向上傳播到更高層的代碼中處理可能更合適。

這樣,你可以集中處理異常,而不是在每個方法中都進行捕獲。

public void FileHandler()
{
    try 
    {
        ReadFile();
    }
    catch (Exception ex) 
    {
        throw// 讓異常往上傳播
    }
}
4. 如果運行代碼后,會造成內存泄漏、資源不可用,或者應用程序狀態不可恢復,則引發異常

假設你正在編寫一個很占內存的操作。

如果操作可以導致內存占用過高,你會怎么做?拋出異常!因為如果內存占用過高,應用程序的狀態將不可恢復。

在這種情況下,拋出異常是必要的。

List<byte[]> memoryLeakList = new List<byte[]>();
long memoryThreshold = 1024 * 1024 * 100

while (true)
{
    byte[] buffer = newbyte[1024 * 1024];
    memoryLeakList.Add(buffer);

    if (GC.GetTotalMemory(false) > memoryThreshold)
    {
        thrownew OutOfMemoryException("內存使用超過閾值,可能導致內存泄漏或應用程序狀態不可恢復。");
    }

    Thread.Sleep(100);
}
5. 在捕獲異常的時候,如果需要包裝一些更有用的信息,則引發異常

這類異常的引發在 UI 層特別有用。

系統引用的異常所帶的信息往往更傾向于技術性的描述;

而在 UI 層,面對異常的很可能是最終普通用戶,所以如果需要將異常的信息呈現給最終用戶,更好的做法明顯是先包裝異常,然后引發一個包含友好信息的新異常。

try 
{
    MyOperation();
}
catch (FileNotFoundException ex)
{
    throw new FileNotFoundException($"無法找到指定的文件: {ex.FileName}", ex);
}
6. 如果底層異常在高層操作的上下文中沒有意義,那么在捕獲這些異常時,引發新的有意義的異常

假設你正在調用 Windows API 或第三方 API 提供的接口時,如果對方的異常報告機制使用的是錯誤代碼,很不好理解,這時你會怎么辦?

最好的方法是重新引發該接口提供的錯誤,創建一個新的更有意義的異常,因為你需要讓團隊更好地理解這些錯誤。

int errorCode = CallApi();

if (errorCode == 6
{
    throw new FileNotFoundException($"文件路徑無效. [{path}]");
}

總結

在編程的世界里,異常處理是一門藝術。

本文我們一起探討了六個關于異常使用的黃金法則。

好的異常使用原則就像是為我們的代碼設置了安全帶。

記住,異常不是敵人,而是提示我們需要關注的地方。


閱讀原文:原文鏈接


該文章在 2025/3/11 18:03:22 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved