Dot-Net

在循環中聲明的變數在循環的每次迭代中都保持值

  • September 27, 2013

我無法確定這是錯誤還是功能

For i = 0 To 4
   Dim strTest As String
   If i = 0 Then
       strTest = "test value"
   End If
   Console.WriteLine(strTest)
Next

我認為通過在循環內聲明字元串,它不會保持其值,但在執行此程式碼後,控制台有 5 行“測試值”。相反,如果我聲明 strTest 如下:

Dim strTest As String= ""

然後字元串不會保持它的值——這就是我最初期望函式執行的方式。

這是編譯器的故意行為嗎?

“按設計破碎”

http://msdn.microsoft.com/en-us/library/1t0wsc67.aspx

注意 即使變數的範圍僅限於塊,它的生命週期仍然是整個過程的生命週期。如果在過程中多次輸入塊,則每個塊變數都保留其先前的值。為了避免在這種情況下出現意外結果,明智的做法是在塊的開頭初始化塊變數。

這裡的“塊”是 FOR 循環的主體,並且您正在輸入一個 pr。循環的迭代。因此 strTest 將保留在第一次迭代中設置的值(“測試值”)用於下一次迭代(1、2、3、4)。

引用自:https://stackoverflow.com/questions/19048795