如何使用結構化的例外處理中 Visual Basic。NET 或 Visual Basic 2005

文章翻譯 文章翻譯
文章編號: 315965 - 檢視此文章適用的產品。
全部展開 | 全部摺疊

在此頁中

結論

本文將示範如何使用結構化的例外處理中 Visual Basic。NET 或 Visual Basic 2005年中。

需求

以下概括列出建議的硬體、 軟體、 網路基礎結構,以及您所需要的 service pack:
  • Visual Basic。NET 或 Visual Basic 2005
本文假設您已熟悉下列主題:
  • Visual Basic。NET 或 Visual Basic 2005
  • Microsoft Visual Studio。NET 或 Microsoft Visual Studio 2005

結構化的例外處理

Visual Basic。NET 或 Visual Basic 2005年提供了結構化的例外處理,可提供功能強大且更具可讀性的替代方案,以"On Error Goto 」 的錯誤處理,可在舊版本的 Microsoft Visual Basic。結構化的例外處理會更具破壞力的因為它允許您將巢狀化其他在相同的程序中的錯誤處理常式內的錯誤處理常式。此外,結構化的例外處理會使用一個區塊的語法類似於如果...其他...End If陳述式。這使得 Visual Basic。NET 和 Visual Basic 2005年程式碼更容易理解且易於維護。

附註: Visual Basic。NET 或 Visual Basic 2005年就會保留用於回溯相容性的"On Error Goto"語法。您仍然可以使用這個語法在 Visual Basic 中。NET 或 Visual Basic 2005年程式碼。不過,您無法合併結構化的例外處理和相同的程序內的On Error陳述式。當您撰寫新程式碼中,Microsoft 建議您,使用結構化例外處理。

結構化的錯誤處理的基本語法如下所示:
Try
   'Code that may raise an error.
Catch
   'Code to handle the error.
Finally
   'Code to do any final clean up.
End Try
				
請試著End Try陳述式是必要的。雖然您必須將至少一個包含在您的程式碼,就不需要的攔截最後的陳述式。您也可以指定多個Catch陳述式,讓每一個Catch區塊處理特定的錯誤。

攔截例外狀況

  1. 啟動 Visual Studio。NET 或 Visual Studio 2005年。
  2. 在 Visual Basic 中建立新的主控台應用程式專案。NET 或 Visual Basic 2005年中。
  3. Sub Main程序中,加入下列程式碼:
    Dim a As Integer = 0
    Dim b As Integer = 0
    Dim c As Integer = 0
    
    Try
      a = b \ c
    Catch exc As Exception
      Console.WriteLine("A run-time error occurred")
    Finally
      Console.ReadLine()
    End Try
    					
  4. 偵錯] 功能表上按一下 [開始],以執行應用程式。此程式碼嘗試除數為零的數字。這是不合法的作業導致除以零的例外狀況。所幸, Catch區塊會攔截這個錯誤,而且 [主控台] 視窗會顯示下列錯誤訊息:
    A run-time error has occurred
    						
  5. 關閉主控台視窗。

擷取多個例外狀況

這一節會說明如何使用多個Catch陳述式來處理不同的錯誤。
  1. 開啟您在前一節中建立主控台應用程式專案。
  2. Sub Main程序中,取代您在下列程式碼與前一節中複製的程式碼:
    Dim a As Integer = 2147483647
    Dim b As Integer = 0
    Dim c As Integer = 0
    
    Try
      a += 1
    Catch exc As DivideByZeroException
      Console.WriteLine("Error: Divide by zero")
    Catch exc As OverflowException
      Console.WriteLine("Error: Overflow")
    Finally
      Console.ReadLine()
    End Try
    						
    這段程式碼包含兩個Catch區塊: 一個攔截先前除數為零的錯誤,而另一個以擷取新的溢位錯誤。
  3. 偵錯] 功能表上按一下 [開始],以執行應用程式。主控台視窗會顯示下列錯誤訊息:
    Error: Overflow
    						
  4. 關閉主控台視窗。
  5. 因為您不能總是預期每次出現錯誤,可能會發生,您可以將攔截所有適用於非預期的例外狀況區塊。例如,加入下列程式碼之前的最後陳述式來擷取任何非預期的錯誤,並顯示適當的錯誤訊息:
    Catch exc As Exception
    Console.WriteLine("Error: " & exc.Message)
    					
  6. 在 [檔案] 功能表上按一下 [關閉方案]。

擲回例外狀況

結構化的例外處理,用於攔截例外狀況的Catch陳述式。結構化的例外處理也能將擲回例外狀況。比方說,是很有幫助您執行資料驗證] 屬性設定的程序之內,因為您可能想要擲回錯誤,如果違反商務規則時所擲回例外狀況。
  1. 啟動 Visual Studio。NET 或 Visual Studio 2005年。
  2. 在 Visual Basic 中建立新的主控台應用程式專案。NET 或 Visual Basic 2005年中。
  3. 在 [專案] 功能表上按一下 [加入類別
  4. 在 [加入新項目] 視窗中,輸入 clsPerson.vb 在文字]名稱方塊,然後再按一下 [ [確定]
  5. 加入下列程式碼在公用類別的clsPerson...結束類別陳述式:
    Private mintAge As Integer
    
    Public Property Age() As Integer
      Get
        Age = mintAge
      End Get
      Set(ByVal Value As Integer)
        If Value >= 0 Then
          mintAge = Value
        Else
          Throw New ArgumentException ("Age cannot be negative")
        End If
      End Set
    End Property
    						
    這段程式碼會建立Age屬性。因為使用者不能有負值的時代,類別的使用者試圖向其中將保留天數設定為小於零的數字,會引發錯誤。
  6. Sub Main程序的 Module1.vb 中,加入下列程式碼:
    Dim p As New clsPerson()
    
    Try
      p.Age = -1
    Catch exc As Exception
      Console.WriteLine(exc.Message)
    Finally
      Console.ReadLine()
    End Try
    					
  7. 偵錯] 功能表上按一下 [開始],以執行應用程式。主控台視窗會顯示下列錯誤訊息:
    Age cannot be negative
    						
  8. 關閉主控台視窗。

完整程式碼清單

攔截例外狀況

Module Module1

  Sub Main()
    Dim a As Integer = 0
    Dim b As Integer = 0
    Dim c As Integer = 0

    Try
      a = b \ c
    Catch exc As Exception
      Console.WriteLine("A run-time error occurred")
    Finally
      Console.ReadLine()
    End Try

  End Sub

End Module
				

擷取多個例外狀況

Module Module1

  Sub Main()
    Dim a As Integer = 2147483647
    Dim b As Integer = 0
    Dim c As Integer = 0

    Try
      a += 1
    Catch exc As DivideByZeroException
      Console.WriteLine("Error: Divide by zero")
    Catch exc As OverflowException
      Console.WriteLine("Error: Overflow")
    Catch exc As Exception
      Console.WriteLine("Error: " & exc.Message)
    Finally
      Console.ReadLine()
    End Try


  End Sub

End Module
				

擲回例外狀況

Module Module1

  Sub Main()
    Dim p As New clsPerson()

    Try
      p.Age = -1
    Catch exc As Exception
      Console.WriteLine(exc.Message)
    Finally
      Console.ReadLine()
    End Try
  End Sub

End Module

Public Class clsPerson

  Private mintAge As Integer

  Public Property Age() As Integer
    Get
      Age = mintAge
    End Get
    Set(ByVal Value As Integer)
      If Value >= 0 Then
        mintAge = Value
      Else
        Throw New ApplicationException("Age cannot be negative")
      End If
    End Set
  End Property

End Class
				

參考

如需詳細資訊,請參閱至下列 Microsoft 網站取得:
錯誤處理 vb.NET 的方式: 住例外狀況 ( Visual Basic 開發人員文)
http://msdn.microsoft.com/en-us/library/aa227603 (v=vs.60).aspx

我該如何攔截例外狀況
http://msdn.microsoft.com/en-us/library/ys1b32h3 (v=vs.80).aspx

我該如何產生一個例外狀況
http://msdn.microsoft.com/en-us/library/z7w9ff54 (v=vs.80).aspx

屬性

文章編號: 315965 - 上次校閱: 2012年6月15日 - 版次: 2.0
這篇文章中的資訊適用於:
  • Microsoft Visual Basic 2005
  • Microsoft Visual Basic .NET 2003 Standard Edition
  • Microsoft Visual Basic .NET 2002 Standard Edition
關鍵字:?
kbvs2005swept kbvs2005applies kbhowtomaster kbmt KB315965 KbMtzh
機器翻譯
重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。
按一下這裡查看此文章的英文版本:315965
Microsoft及(或)其供應商不就任何在本伺服器上發表的文字資料及其相關圖表資訊的恰當性作任何承諾。所有文字資料及其相關圖表均以「現狀」供應,不負任何擔保責任。Microsoft及(或)其供應商謹此聲明,不負任何對與此資訊有關之擔保責任,包括關於適售性、適用於某一特定用途、權利或不侵權的明示或默示擔保責任。Microsoft及(或)其供應商無論如何不對因或與使用本伺服器上資訊或與資訊的實行有關而引起的契約、過失或其他侵權行為之訴訟中的特別的、間接的、衍生性的損害或任何因使用而喪失所導致的之損害、資料或利潤負任何責任。

提供意見

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com