C# try catch 使用

来源:https://www.cnblogs.com/wjygxjz/archive/2023/09/11/17694470.html
-Advertisement-
Play Games

try catch使用場景: 1. 一般線上程,委托中使用, 線上程與委托中使用是因為,如果線程和委托中出現異常在程式外部是捕獲不到的,需要在內部做單獨處理。 2. 程式的外層使用,比如程式的入口處加一個全局異常捕獲,這樣整個程式發生的異常都可以捕獲到。 3. 在事件或者主體方法中使用,一些小的公共 ...


try catch使用場景: 1. 一般線上程,委托中使用, 線上程與委托中使用是因為,如果線程和委托中出現異常在程式外部是捕獲不到的,需要在內部做單獨處理。 2. 程式的外層使用,比如程式的入口處加一個全局異常捕獲,這樣整個程式發生的異常都可以捕獲到。 3. 在事件或者主體方法中使用,一些小的公共方法可以不使用,需要單獨處理異常的除外。 4. 在一些調用比較多的公共方法里如果使用tryc catch 最好將異常 throw拋出去,又上層處理異常,這樣在發現異常時可以知道是由那個方法調用的。 5. 很多時候程式部署到現場是沒有源碼可以調試的,這個時候就得需要通過分析日誌來排查問題,try catch 大多會和logNet4 結合使用,在catch中使用logNet4記錄異常信息,lognet4記錄的日誌可以把異常方法調用的層級以及具體代碼的行號記錄下拉方便排查問題。 6. try catch不能寫的太多,也不能寫的太少。寫太少1. 容易把系統的異常信息彈窗提示到頁面,可是這個提示信息用戶是看不懂的,造成不好的用戶體驗。2. 程式容易閃退,還找不到因為什麼原因閃退。try catch寫的太多,在調用比較多方法里發生異常了,可能就不方便定位是由那個功能調用的這個方法導致的異常了,不方便排查問題。  

在C#中,try-catch語句用於異常處理。它允許您在代碼塊中檢測和捕獲異常,以便您可以在程式運行時進行錯誤處理和調試。

try-catch語句的基本結構如下:

try
{
// 可能引發異常的代碼
}
catch (ExceptionType1 ex)
{
// 處理特定異常類型ExceptionType1的代碼
}
catch (ExceptionType2 ex)
{
// 處理特定異常類型ExceptionType2的代碼
}
catch (ExceptionType3 ex)
{
// 處理特定異常類型ExceptionType3的代碼
}
finally
{
// 無論是否發生異常,都會執行的代碼
}

try塊中,您放置可能會引發異常的代碼。當執行到try塊中的代碼時,如果發生異常,程式將跳轉到與異常類型匹配的catch塊。您可以根據需要添加多個catch塊,以處理不同類型的異常。最後一個catch塊通常不指定異常類型,因此它將捕獲所有未處理的異常。

finally塊是可選的,它包含的代碼無論是否發生異常都會執行。這對於清理資源或執行必要的操作非常有用,例如關閉文件或資料庫連接。

以下是一個使用try-catch語句的示例:

try
{
int result = 0;
result = 10 / 0; // 除以零將引發DivideByZeroException異常
}
catch (DivideByZeroException ex)
{
Console.WriteLine("除數不能為零:{0}", ex.Message);
}
catch (Exception ex)
{
Console.WriteLine("發生未處理的異常:{0}", ex.Message);
}
finally
{
Console.WriteLine("程式結束。");
}
在上面的示例中,我們嘗試將10除以0,這將引發DivideByZeroException異常。try-catch語句捕獲該異常,並執行與DivideByZeroException類型匹配的catch塊。然後,無論是否發生異常,都會執行finally塊中的代碼。

 

以下是一些其他使用try-catch語句的示例:

    1. 文件讀取示例:
try
{
using (StreamReader reader = new StreamReader("file.txt"))
{
string content = reader.ReadToEnd();
Console.WriteLine(content);
}
}
catch (FileNotFoundException ex)
{
Console.WriteLine("文件未找到:{0}", ex.Message);
}
catch (IOException ex)
{
Console.WriteLine("文件讀取錯誤:{0}", ex.Message);
}
finally
{
Console.WriteLine("程式結束。");
}
  1. 網路連接示例:
    try
    {
    using (TcpClient client = new TcpClient("example.com", 80))
    {
    NetworkStream stream = client.GetStream();
    // 進行網路通信操作
    }
    }
    catch (SocketException ex)
    {
    Console.WriteLine("網路連接異常:{0}", ex.Message);
    }
    catch (Exception ex)
    {
    Console.WriteLine("發生未處理的異常:{0}", ex.Message);
    }
    finally
    {
    Console.WriteLine("程式結束。");
    }
    1. 資料庫連接示例:
      try
      {
      using (SqlConnection connection = new SqlConnection("connectionString"))
      {
      connection.Open();
      // 進行資料庫操作
      }
      }
      catch (SqlException ex)
      {
      Console.WriteLine("資料庫連接異常:{0}", ex.Message);
      }
      catch (Exception ex)
      {
      Console.WriteLine("發生未處理的異常:{0}", ex.Message);
      }
      finally
      {
      Console.WriteLine("程式結束。");
      }

      4. 用戶輸入驗證:

      try
      {
      // 進行用戶輸入驗證操作,例如驗證用戶名或密碼的合法性
      }
      catch (FormatException ex)
      {
      Console.WriteLine("輸入格式錯誤:{0}", ex.Message);
      }
      catch (InvalidOperationException ex)
      {
      Console.WriteLine("輸入無效:{0}", ex.Message);
      }
      catch (Exception ex)
      {
      Console.WriteLine("發生未處理的異常:{0}", ex.Message);
      }
      finally
      {
      Console.WriteLine("程式結束。");
      }

      這些示例展示瞭如何在不同的情況下使用try-catch語句來處理可能發生的異常,並相應地進行錯誤處理和程式結束的操作。

    2. c# 委托中需要寫 try catch 嗎  

      在C#中,委托是一種引用方法的數據類型,可以像其他對象一樣被傳遞和操作。當使用委托時,是否需要使用try-catch語句來處理異常取決於具體的情況。

      如果你在代碼中直接調用委托,並且該委托引用的方法是可能會拋出異常的,那麼你需要考慮是否需要使用try-catch語句來捕獲異常。例如,如果委托引用的是一個訪問資料庫的方法,而該方法可能會在資料庫連接失敗時拋出異常,那麼在調用該委托時,你可能需要使用try-catch語句來捕獲該異常並做出相應的處理。

      另一方面,如果你在代碼中通過委托鏈式調用多個方法,那麼每個方法都需要獨立的異常處理邏輯。在這種情況下,你可能需要在每個方法中都使用try-catch語句來捕獲異常,並做出相應的處理。

      總之,是否需要使用try-catch語句來處理委托中的異常取決於具體的情況和需求。如果可能存在異常情況,建議在適當的位置使用try-catch語句來捕獲和處理異常,以確保程式的穩定性和可靠性。

      c# 線程中寫 try catch  

      在C#中,當在多線程環境中編寫代碼時,使用try-catch語句來捕獲異常是非常重要的。由於多個線程可能同時執行代碼,因此異常可能會在不同的線程中發生。為了能夠正確地處理異常,建議在每個線程的代碼中都使用try-catch語句。

      以下是一個示例,展示瞭如何在C#多線程中使用try-catch語句:

      using System.Threading;
      
      class Program
      {
          static void Main(string[] args)
          {
              // 創建兩個線程
              Thread thread1 = new Thread(ThreadTask1);
              Thread thread2 = new Thread(ThreadTask2);
      
              // 啟動線程
              thread1.Start();
              thread2.Start();
      
              // 等待兩個線程完成
              thread1.Join();
              thread2.Join();
          }
      
          static void ThreadTask1()
          {
              try
              {
                  // 在此處執行可能引發異常的代碼
              }
              catch (Exception ex)
              {
                  // 處理異常
                  Console.WriteLine("Thread 1異常:{0}", ex.Message);
              }
          }
      
          static void ThreadTask2()
          {
              try
              {
                  // 在此處執行可能引發異常的代碼
              }
              catch (Exception ex)
              {
                  // 處理異常
                  Console.WriteLine("Thread 2異常:{0}", ex.Message);
              }
          }
      }

      在上述示例中,我們創建了兩個線程,每個線程都執行不同的任務。在每個任務的代碼中,我們都使用了try-catch語句來捕獲可能發生的異常,併進行了相應的處理。這樣,無論哪個線程發生異常,我們都可以捕獲並處理它,以避免程式出現不可預期的行為。

      try catch throw 在編程中,try-catch-throw是一種常見的錯誤處理模式。這三個關鍵字通常一起使用,以捕獲異常、處理異常和重新拋出異常。 throwthrow關鍵字用於在代碼中手動拋出異常。當使用throw關鍵字時,程式將停止當前方法的執行,並跳轉到調用該方法的最近的catch塊。 需要註意的是,throw關鍵字只能拋出繼承自Exception類的對象。此外,如果方法內部沒有提供處理異常的邏輯,而是直接拋出異常,那麼在調用該方法時需要使用try-catch塊或者聲明該方法拋出異常。

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

-Advertisement-
Play Games
更多相關文章
  • 前言 最近為一個公眾號h5商城接入了微信支付功能,查找資料過程中踩了很多坑,以此文章記錄一下和大家分享 前期準備 公眾號認證 微信支付功能需要開通企業號併進行資質認證,費用一年300,且需企業營業執照等信息,對公賬戶打款驗證 登錄微信公眾平臺https://mp.weixin.qq.com/,創建服 ...
  • 本文深入探討了Go語言中的代碼包和包引入機制,從基礎概念到高級應用一一剖析。文章詳細講解瞭如何創建、組織和管理代碼包,以及包引入的多種使用場景和最佳實踐。通過閱讀本文,開發者將獲得全面而深入的理解,進一步提升Go開發的效率和質量。 關註公眾號【TechLeadCloud】,分享互聯網架構、雲服務技術 ...
  • 在併發編程中我們為啥一般選用創建多個線程去處理任務而不是創建多個進程呢?這是因為線程之間切換的開銷小,適用於一些要求同時進行並且又要共用某些變數的併發操作。而進程則具有獨立的虛擬地址空間,每個進程都有自己獨立的代碼和數據空間,程式之間的切換會有較大的開銷。 ...
  • 日誌是應用程式的重要組成部分。無論是服務端程式還是客戶端程式都需要日誌做為錯誤輸出或者業務記錄。在這篇文章中,我們結合log4rs聊聊rust 程式中如何使用日誌。 ...
  • 本章筆者將介紹一種通過Metasploit生成ShellCode並將其註入到特定PE文件內的Shell植入技術。該技術能夠劫持原始PE文件的入口地址,在PE程式運行之前執行ShellCode反彈,執行後掛入後臺並繼續運行原始程式,實現了一種隱蔽的Shell訪問。而我把這種技術叫做位元組註入反彈。位元組註... ...
  • 1.網關介紹 如果沒有網關,難道不行嗎?功能上是可以的,我們直接調用提供的介面就可以了。那為什麼還需要網關? 因為網關的作用不僅僅是轉發請求而已。我們可以試想一下,如果需要做一個請求認證功能,我們可以接入到 API 服務中。但是倘若後續又有服務需要接入,我們又需要重覆接入。這樣我們不僅代碼要重覆編寫 ...
  • 開心一刻 昨晚和一個朋友聊天 我:處對象嗎,咱倆試試? 朋友:我有對象 我:我不信,有對象不公開? 朋友:不好公開,我當的小三 問題背景 程式在生產環境穩定的跑著 直到有一天,公司執行組件漏洞掃描,有漏洞的 jar 要進行升級修複 然後我就按著掃描報告將有漏洞的 jar 修複到指定的版本 自己在開發 ...
  • Unity 性能優化Shader分析處理函數:ShaderUtil.GetShaderGlobalKeywords用法 點擊封面跳轉下載頁面 簡介 Unity 性能優化Shader分析處理函數:ShaderUtil.GetShaderGlobalKeywords用法 在Unity開發中,性能優化是一 ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...