Неинициализированное целое число, не сбрасываемое в каждой итерации цикла - PullRequest
1 голос
/ 17 июня 2019

Задача

Я тестирую следующий простой код VB.Net:

  For i = 0 To 5
     Dim f As Integer
     If i = 3 Then
        f = 1
     End If
     Debug.WriteLine(f)
  Next

и вывод выглядит следующим образом:

0
0
0
1
1
1

но я ожидал:

0
0
0
1
0
0

Решение

Простой способ решить эту проблему - заменить Dim f As Integer на Dim f As Integer = 0

Вопрос

Это ожидаемое поведение и если да, то почему?

1 Ответ

3 голосов
/ 17 июня 2019

Это задокументировано в Руководстве по программированию в Visual Basic :

Даже если область действия переменной ограничена блоком, время ее жизни остается тем же, что и для всей процедуры,Если вы вводите блок более одного раза во время процедуры, каждая переменная блока сохраняет свое предыдущее значение.Чтобы избежать неожиданных результатов в таком случае, целесообразно инициализировать переменные блока в начале блока.

Это точно описывает поведение, которое вы видите.

Я надеваю не знаю, почему язык был спроектирован таким образом - я предпочитаю язык, который не позволяет использовать переменную без определенного значения - но я не удивлюсь, если это просто вопросистории и обратной совместимости на данном этапе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...