C#自定義異常就這麼簡單

来源:https://www.cnblogs.com/xbhp/archive/2023/05/09/17384550.html
-Advertisement-
Play Games

C#是一種強類型語言,可以捕獲和處理各種異常,從而幫助我們發現程式中出現的錯誤。在程式開發過程中,如果需要找到特定的錯誤情況並處理,這時就需要創建自定義異常。本文將介紹如何在C#中創建和使用自定義異常。 1、什麼是異常? 異常是指在程式執行期間發生的錯誤或異常情況,例如除法中除以0、文件不存在、記憶體 ...


C#是一種強類型語言,可以捕獲和處理各種異常,從而幫助我們發現程式中出現的錯誤。在程式開發過程中,如果需要找到特定的錯誤情況並處理,這時就需要創建自定義異常。本文將介紹如何在C#中創建和使用自定義異常。

1、什麼是異常?

異常是指在程式執行期間發生的錯誤或異常情況,例如除法中除以0、文件不存在、記憶體不足等。當發生異常時,程式會停止執行當前的操作,並拋出一個異常對象。異常對象包含有關異常情況的信息,例如異常類型、錯誤消息、堆棧跟蹤等。

C# 異常處理基於四個關鍵字構建:try、catch、finally 和 throw。

1)try- try 塊標識為其激活特定異常的代碼塊。它後面是一個或多個捕獲塊。

2)catch- 程式在程式中要處理問題的位置使用異常處理程式捕獲異常。catch 關鍵字捕獲發生的異常。

3)finally - finally 塊用於執行一組給定的語句,無論是否引發異常。例如,如果打開一個文件,無論是否引發異常,都必須關閉該文件。

4)throw- 當出現問題時,程式會引發異常。這是使用 throw 關鍵字完成的。

2、在C#中自定義異常

接下來我們來看看如何創建C#異常類,在C#中,創建自定義異常很簡單。只需要創建一個類,並從System.Exception類或其子類派生即可。例如,以下代碼創建了一個名為CustomException的自定義異常類:

//創建一個沒有錯誤消息的異常對象
public class CustomException : Exception
{
    public CustomException() { }
    //創建一個包含錯誤消息的異常對象。
    public CustomException(string message)
        : base(message){throw new Exception(message);}
    //創建一個包含錯誤消息和內部異常對象的異常對象。
    public CustomException(string message, Exception innerException)
        : base(message, innerException) { }
}

這樣一個自定義異常就創建好了。

使用自定義異常類

使用自定義異常與使用內置異常類相同。只需要在程式中拋出異常對象,並使用try-catch塊捕獲異常即可。代碼如下:

try
{
    //如果是k引發d二異常會報錯系統異常
    //int i=0; int j=1;
    //int k=i/j;
    // 某些操作 下麵會報自定義異常
    throw new CustomException("發生了自定義異常");
}
catch (CustomException ex)
{
    Console.WriteLine("自定義異常:"+ex.Message);
}
catch (Exception ex)
{
    Console.WriteLine("系統異常:"+ex.Message);
}
 //歡迎關註公眾號:DOTNET開發跳槽,領取海量面試題。加微信號xbhpnet入群

上面代碼如果是除0問題會報系統異常,而自定義異常在觸發的時候報自定義異常。如下:

圖片

3、自定義異常的使用場景

以上實現了自定義異常類,那麼自定義異常類通常在哪些場景下使用呢?

1)檢測業務規則

當我們需要檢查業務規則時,可以創建自定義異常類。例如,當用戶嘗試創建一個已經存在的賬戶時,我們可以拋出一個名為DuplicateAccountException的自定義異常。

2)易於調試

通過使用自定義異常類,我們可以更好地調試代碼。當我們拋出一個自定義異常時,可以將更多有用的信息傳遞給調用者,例如錯誤消息、錯誤代碼和堆棧跟蹤等。這些信息有助於調用者快速定位問題併進行修複。

結語

自定義異常是處理特定錯誤情況的好方法。通過創建自定義異常類,我們可以更好地控製程序的行為,並提供有用的錯誤信息。希望本文對你帶來收穫,歡迎留言和吐槽。5.1長假結束了,希望大家過完節滿血複活,重回人生巔峰!!

參考:微軟官方文檔

版權聲明:本文來源於網友收集或網友供稿,僅供學習交流之用,如果有侵權,請轉告小編或者留言,本公眾號立即刪除。


來源公眾號:DotNet開發跳槽

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • make 備忘清單 make是一條電腦指令,是在安裝有GNU Make的電腦上的可執行指令。該指令是讀入一個名為makefile [1] 的文件,然後執行這個文件中指定的指令。 Make可以從一個名為makefile的文件中獲得如何構建你所寫程式的依賴關係,Makefile中列出了每個目標文件以 ...
  • Markdown 備忘清單 Markdown 是一種輕量級標記語言,創始人為約翰·格魯伯(John Gruber)。 它允許人們使用易讀易寫的純文本格式編寫文檔,然後轉換成有效的 XHTML(或者HTML)文檔。這種語言吸收了很多在電子郵件中已有的純文本標記的特性。 由於 Markdown 的輕量化 ...
  • Applicationcontext的功能拓展主要來自於不屬於beanfactory的介面,主要包括四個介面 Messagesource :國際化 ResourcePatternResolver :獲取資源 ApplicationEventPublisher:發佈事件 EnvironmentCapa ...
  • Listener監聽器,實現一個顯示線上用戶人數 每博一文案 關於後半身,脾氣越溫,福報越深。 師傅說:惜命最好的方式不是養生,而是管好自己的情緒。 壞毛病都是慣出來的,但好脾氣都是磨出來的,與人生氣,傷的是和氣,與自己生氣,傷的是身體。 佛說:人有五毒心,貪嗔痴慢疑,其中一時的嗔念起,百萬葉障深, ...
  • GMP調度場景 場景1 P擁有G1,M1獲取P後開始運行G1,G1使用 go func 創建G2,為了局部性G2優先加入到P1的本地隊列 場景2 G1運行完成後(函數:goexit),M上運行的goroutine切換為G0,G0負責調度時協程的切換(函數:schedule)。從P的本地隊列取G2,從 ...
  • Legends-Of-Heroes 一個LOL風格的球球大作戰游戲,基於ET7.2,使用狀態同步 Main 基於C#雙端框架[ET7.2],同步到ET主幹詳情請看日誌。(https://github.com/egametang/ET) 註意:已經升級.Net7,請安裝.Net7 SDK. 此游戲為E ...
  • 字元串駐留池(string intern pool)是指,對於某些編程語言,相同的字元串字面值(即具有相同文本內容的字元串)在程式運行時只會被在記憶體中存儲一份,即只保存一個字元串實例。這樣做可以減少記憶體占用,並提高程式執行的效率。 在 Java 中,字元串駐留池是一個存儲字元串的緩存,它存儲在運行時 ...
  • 1、創建WEBAPI 1 using Dapper; 2 using MesErp.Models; 3 using Microsoft.AspNetCore.Mvc; 4 using Microsoft.Extensions.Configuration; 5 using Newtonsoft.Jso ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...