91网首页-91网页版-91网在线观看-91网站免费观看-91网站永久视频-91网站在线播放

LOGO OA教程 ERP教程 模切知識(shí)交流 PMS教程 CRM教程 開發(fā)文檔 其他文檔  
 
網(wǎng)站管理員

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

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

前言

編程的世界充滿了挑戰(zhàn)和樂(lè)趣,異常就是我們繞不過(guò)去的大石頭。

有時(shí)候,我們需要主動(dòng)引發(fā)一些異常;

有時(shí)候,我們又需要主動(dòng)捕捉一些異常;

有時(shí)候,我們還需要學(xué)會(huì)消滅一些異常;

……

所以,我們需要一套異常使用原則來(lái)幫助我們穩(wěn)住船舶,不讓意外攪亂了我們的編程節(jié)奏!

今天,我們就來(lái)聊聊六個(gè)關(guān)于異常使用的黃金法則,幫助你在這個(gè)充滿挑戰(zhàn)的領(lǐng)域中游刃有余。

六大原則

1. 不要對(duì)在可控范圍內(nèi)的輸入和輸出引發(fā)異常

這個(gè)原則的意思是,

在編寫代碼時(shí),如果某些輸入或輸出是你可以預(yù)見(jiàn)并且可以控制的,就不要引發(fā)異常。

想象一下,你正在編寫一個(gè)計(jì)算器應(yīng)用程序。

用戶輸入了兩個(gè)數(shù)字,你準(zhǔn)備進(jìn)行除法運(yùn)算。如果用戶輸入的除數(shù)是零,你會(huì)怎么做?拋出異常嗎?

不!在這種情況下,你可以簡(jiǎn)單地返回一個(gè)錯(cuò)誤消息,或者提示用戶重新輸入。

因?yàn)椋脩糨斎肓闶强煽氐模瑳](méi)必要大驚小怪。

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

假設(shè)你正在編寫一個(gè)電商網(wǎng)站的訂單處理系統(tǒng)。

如果用戶嘗試購(gòu)買一個(gè)已經(jīng)售罄的商品,你會(huì)拋出異常嗎?

當(dāng)然不!

你可以簡(jiǎn)單地返回一個(gè)“商品已售罄”的消息,或者將用戶引導(dǎo)到其他商品頁(yè)面,因?yàn)檫@是一個(gè)正常的業(yè)務(wù)邏輯。

異常是用來(lái)處理意外情況的,而不是用來(lái)處理正常的業(yè)務(wù)流程。

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

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

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

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

假設(shè)你正在編寫一個(gè)底層的文件處理程序。

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

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

這樣,你可以集中處理異常,而不是在每個(gè)方法中都進(jìn)行捕獲。

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

假設(shè)你正在編寫一個(gè)很占內(nèi)存的操作。

如果操作可以導(dǎo)致內(nèi)存占用過(guò)高,你會(huì)怎么做?拋出異常!因?yàn)槿绻麅?nèi)存占用過(guò)高,應(yīng)用程序的狀態(tài)將不可恢復(fù)。

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

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("內(nèi)存使用超過(guò)閾值,可能導(dǎo)致內(nèi)存泄漏或應(yīng)用程序狀態(tài)不可恢復(fù)。");
    }

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

這類異常的引發(fā)在 UI 層特別有用。

系統(tǒng)引用的異常所帶的信息往往更傾向于技術(shù)性的描述;

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

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

假設(shè)你正在調(diào)用 Windows API 或第三方 API 提供的接口時(shí),如果對(duì)方的異常報(bào)告機(jī)制使用的是錯(cuò)誤代碼,很不好理解,這時(shí)你會(huì)怎么辦?

最好的方法是重新引發(fā)該接口提供的錯(cuò)誤,創(chuàng)建一個(gè)新的更有意義的異常,因?yàn)槟阈枰寛F(tuán)隊(duì)更好地理解這些錯(cuò)誤。

int errorCode = CallApi();

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

總結(jié)

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

本文我們一起探討了六個(gè)關(guān)于異常使用的黃金法則。

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

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


閱讀原文:原文鏈接


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

主站蜘蛛池模板: 国产综合8 | 午夜欧美国产一区 | 日本三级网站 | 国产午夜三级 | 国产v片在线播放 | 99电影网 | 国产精品一二区 | 国产精品一页 | 91丝袜国产欧美 | 欧美性喷潮| 国产激情在线五月天 | 日本欧美在线播放 | 97国产人人| 欧美日韩国产视频 | 三级国产精品 | 日本欧洲亚洲免费 | 乱子伦国| 成人一区不卡播放 | 日韩美色中文娱乐网 | 99热精品首页 | 欧洲一级大黄大 | 日本高清色本 | 日韩精品极品视频 | 蜜桃成熟时在线观看 | 国产一区中文字幕 | 午夜欧美福利 | 91抖音视频成人 | 中文字幕精 | 精品91 | 96国产| 中文字幕日本不卡 | 国产97在线看 | 国精产品一品二品国 | 日本女性车厢的概况 | 精品a视频在线观看 | 国产无线乱码 | 国产精品天天在线看 | 国产一区二区寻花 | 午夜欧美| 国产日产欧产美韩 | 琪琪色18 |