您目前已離線,請等候您的網際網路重新連線

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

重要:本文是以 Microsoft 機器翻譯軟體翻譯而成,而非使用人工翻譯而成。Microsoft 同時提供使用者人工翻譯及機器翻譯兩個版本的文章,讓使用者可以依其使用語言使用知識庫中的所有文章。但是,機器翻譯的文章可能不盡完美。這些文章中也可能出現拼字、語意或文法上的錯誤,就像外國人在使用本國語言時可能發生的錯誤。Microsoft 不為內容的翻譯錯誤或客戶對該內容的使用所產生的任何錯誤或損害負責。Microsoft也同時將不斷地就機器翻譯軟體進行更新。

按一下這裡查看此文章的英文版本:315965
結論
本文將示範如何使用結構化的例外處理中 Visual Basic。NET 或 Visual Basic 2005年中。

back to the top

需求

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

結構化的例外處理

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區塊處理特定的錯誤。

back to the top

攔截例外狀況

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

擷取多個例外狀況

這一節會說明如何使用多個Catch陳述式來處理不同的錯誤。
  1. 開啟您在前一節中建立主控台應用程式專案。
  2. Sub Main程序中,取代您在下列程式碼與前一節中複製的程式碼:
    Dim a As Integer = 2147483647Dim b As Integer = 0Dim c As Integer = 0Try  a += 1Catch 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 ExceptionConsole.WriteLine("Error: " & exc.Message)					
  6. 在 [檔案] 功能表上按一下 [關閉方案]。
back to the top

擲回例外狀況

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

完整程式碼清單

攔截例外狀況

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 SubEnd Module				
back to the top

擷取多個例外狀況

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 SubEnd Module				
back to the top

擲回例外狀況

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 SubEnd ModulePublic 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 PropertyEnd Class				
back to the top

參考

如需詳細資訊,請參閱至下列 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

back to the top

警告:本文為自動翻譯

內容

文章識別碼:315965 - 最後檢閱時間:06/15/2012 08:51:00 - 修訂: 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
意見反應
ent.createElement('meta');m.name='ms.dqp0';m.content='true';document.getElementsByTagName('head')[0].appendChild(m);" onload="var m=document.createElement('meta');m.name='ms.dqp0';m.content='false';document.getElementsByTagName('head')[0].appendChild(m);" src="http://c1.microsoft.com/c.gif?">