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 微服務框架,幫助我們輕鬆構建和管理微服務應用。 本框架不僅支持 Consul 服務註 ...
  • 先看一下效果吧: 如果不會寫動畫或者懶得寫動畫,就直接交給Blend來做吧; 其實Blend操作起來很簡單,有點類似於在操作PS,我們只需要設置關鍵幀,滑鼠點來點去就可以了,Blend會自動幫我們生成我們想要的動畫效果. 第一步:要創建一個空的WPF項目 第二步:右鍵我們的項目,在最下方有一個,在B ...
  • Prism:框架介紹與安裝 什麼是Prism? Prism是一個用於在 WPF、Xamarin Form、Uno 平臺和 WinUI 中構建鬆散耦合、可維護和可測試的 XAML 應用程式框架 Github https://github.com/PrismLibrary/Prism NuGet htt ...
  • 在WPF中,屏幕上的所有內容,都是通過畫筆(Brush)畫上去的。如按鈕的背景色,邊框,文本框的前景和形狀填充。藉助畫筆,可以繪製頁面上的所有UI對象。不同畫筆具有不同類型的輸出( 如:某些畫筆使用純色繪製區域,其他畫筆使用漸變、圖案、圖像或繪圖)。 ...
  • 前言 嗨,大家好!推薦一個基於 .NET 8 的高併發微服務電商系統,涵蓋了商品、訂單、會員、服務、財務等50多種實用功能。 項目不僅使用了 .NET 8 的最新特性,還集成了AutoFac、DotLiquid、HangFire、Nlog、Jwt、LayUIAdmin、SqlSugar、MySQL、 ...
  • 本文主要介紹攝像頭(相機)如何採集數據,用於類似攝像頭本地顯示軟體,以及流媒體數據傳輸場景如傳屏、視訊會議等。 攝像頭採集有多種方案,如AForge.NET、WPFMediaKit、OpenCvSharp、EmguCv、DirectShow.NET、MediaCaptre(UWP),網上一些文章以及 ...
  • 前言 Seal-Report 是一款.NET 開源報表工具,擁有 1.4K Star。它提供了一個完整的框架,使用 C# 編寫,最新的版本採用的是 .NET 8.0 。 它能夠高效地從各種資料庫或 NoSQL 數據源生成日常報表,並支持執行複雜的報表任務。 其簡單易用的安裝過程和直觀的設計界面,我們 ...
  • 背景需求: 系統需要對接到XXX官方的API,但因此官方對接以及管理都十分嚴格。而本人部門的系統中包含諸多子系統,系統間為了穩定,程式間多數固定Token+特殊驗證進行調用,且後期還要提供給其他兄弟部門系統共同調用。 原則上:每套系統都必須單獨接入到官方,但官方的接入複雜,還要官方指定機構認證的證書 ...
  • 本文介紹下電腦設備關機的情況下如何通過網路喚醒設備,之前電源S狀態 電腦Power電源狀態- 唐宋元明清2188 - 博客園 (cnblogs.com) 有介紹過遠程喚醒設備,後面這倆天瞭解多了點所以單獨加個隨筆 設備關機的情況下,使用網路喚醒的前提條件: 1. 被喚醒設備需要支持這WakeOnL ...
  • 前言 大家好,推薦一個.NET 8.0 為核心,結合前端 Vue 框架,實現了前後端完全分離的設計理念。它不僅提供了強大的基礎功能支持,如許可權管理、代碼生成器等,還通過採用主流技術和最佳實踐,顯著降低了開發難度,加快了項目交付速度。 如果你需要一個高效的開發解決方案,本框架能幫助大家輕鬆應對挑戰,實 ...