變數範圍(Variable Scope) Visual Basic.NET 讓 Local 變數支援 block 範圍,也就是在迴圈或 If 等等區塊內宣告的變數在外部是看不到的,所以若程式碼撰寫如下Imports System
Namespace MyNamespace
![]()
Module MyModule
![]()
Sub Main()
![]()
Dim j as integer
![]()
For j=1 to 10
![]()
If True Then
![]()
Dim i As Integer
![]()
i=i+1
![]()
Console.WriteLine("在內部的 i= " & cstr(i))
![]()
End If
![]()
Console.WriteLine("可否使用在內部的 i= " & cstr(i))
![]()
Next j
![]()
End Sub
End Module
End Namespace
在 If 區塊外使用變數 i 會導致編譯錯誤,如下圖

若拿掉該行,便可以正確執行。
但要注意的是,雖然在區塊之外看不見變數,但變數的生命週期(lifetime)並未結束。也就是說若你重新進入該區塊,你仍然可以使用該變數。所以上述的程式碼經編譯後的執行結果如下

結構化例外處理(Structured Exception Handling)Visual Basic.NET 支援結構化例外處理,使用其他語言如 C++ 早已經使用的語法 Try...Catch...Finally 以受保護的程式區塊(protected blocks)搭配過濾(filter)的使用﹔來做例外處理。 使用原先 On Error... 這種非結構化的例外處理效率較差,並較難維護程式碼。
■ Try...Catch...Finally 的程式碼結構如下 --Try '開始結構化例外處理,在這一段裡面的程式碼可能會產生例外狀況 Catch [選擇性的過濾] '如果在 Try 程式段之中有例外發生,就會執行這裡面的程式碼 [其他的 Catch 區塊] Finally'在離開 Try 區塊之前一定會執行的程式碼 End Try
在 Try 的區塊中放有例外處理需要監控的程式碼。如果在這一個區段中執行的任何程式碼發生錯誤,執行權會傳送到 Catch 區塊中的第一行程式碼。在 Catch 區塊中可以放置處理一般例外(錯誤)的程式碼。你可以定義多個 Catch 區塊,並定義在不同的狀況下執行不同的 Catch 區塊。在 Finally 區塊可以放置結尾的程式碼,如關閉檔案,釋放物件等等。
■ 使用 Try...Catch...Finally --使用 Try...Catch...Finally 區塊可以包住可能會發生錯誤的程式碼,你可以利用巢狀(nest)的方式在例外處理中再包例外處理,在每一個區塊中宣告的變數屬於該區塊的區域變數。
程式範例如下
Function GetStringsFromFile(ByVal FileName As String) As String
![]()
Dim strTest, Strings As String
![]()
Dim Stream As StreamReader = File.OpenText(FileName) '開啟檔案
![]()
Try
![]()
While True '迴圈一直執行到 EndOfStreamException 錯誤發生
![]()
strTest = Stream.readline()
![]()