В VB.NET имеются следующие условные структуры:
If ... Then
Select Case
Конструкция If ... Then проверяет истинность некоторого условия и зависимости от результатов проверки выполняет определенный код:
Dim num1 As Integer = 10
Dim num2 As Integer = 9
If (num1 > num2) Then
Console.WriteLine("Число {0} больше числа {1}", num1, num2)
End If
Здесь проверяем, больше ли число num1 числа num2, и если num1 больше чем num2. то выводим сообщение. Но, допустим, мы захотим, чтобы в случае невыполнения этого условия тоже совершалось какое-нибудь действие. Тогда мы добавляем выражение Else и после него определяем те действия, которые будут совершаться, если программа не удовлетворяет условию в выражении If. Например, мы будем выводить сообщение, что первое число меньше второго:
Dim num1 As Integer = 10
Dim num2 As Integer = 9
If (num1 > num2) Then
Console.WriteLine("Число {0} больше числа {1}", num1, num2)
Else
Console.WriteLine("Число {0} меньше числа {1}", num1, num2)
End If
Но как вы уже заметили, мы сделали немного неправильно. Так как первое число может быть не только больше или меньше второго: оба числа могут быть равны друг другу. В этом случае мы можем определить альтернативные условия с помощью ключевого слова ElseIf:
Dim num1 As Integer = 10
Dim num2 As Integer = 9
If (num1 > num2) Then
Console.WriteLine("Число num1 больше числа num2")
ElseIf num1 < num2 Then
Console.WriteLine("Число num1 меньше числа num2")
Else
Console.WriteLine("Число num1 равно числу num2")
End If
или так:
Dim R As New Random()
Dim num1 As Integer = R.Next(100)
If num1 = 1 Then
Console.WriteLine("Число num1 равно 1")
ElseIf num1 = 2 Then
Console.WriteLine("Число num1 равно 2")
ElseIf num1 = 3 Then
Console.WriteLine("Число num1 равно 3")
Else
Console.WriteLine("Число num1 больше 3")
End If
В данном примере мы использовали генератор случайных чисел, который представлен классом Random.
Строка Dim R As New Random() выполняет инициализацию генератора случайных чисел. А в следующей строке Dim num1 As Integer = R.Next(100)
мы присваиваем числу num1 случайное значение, которое выдаст нам генератор, причем в качестве максимально возможного значения выбрано число 100.
Конструкция Select Case подобна в конструкции If...Then, так как позволяет обрабатывать сразу несколько условий. После слов Select Case указывается сравниваемое выражение. Значение этого выражения последовательно сравнивается со значениями, помещенными после оператора Case. И в случае если значения совпали, то выполняется блок команд, помещенных после данного оператора Case. Конструкция завершается словами End Select. Если мы хотим определить действия, которые будут выполняться, если совпадений не выявлено, то мы можем использовать оператор Case Else, после которого помещаем блок действий по умолчанию. Блок Case Else необязателен и может не употребляться Так, мы можем переписать предыдущий пример с помощью Select Case:
Dim R As New Random()
Dim num1 As Integer = R.Next(100)
Select Case num1
Case 1
Console.WriteLine("Число num1 равно 1")
Case 2
Console.WriteLine("Число num1 равно 2")
Case 3 To 25
Console.WriteLine("Число num1 находится на отрезке от 3 до 25")
Case Else
Console.WriteLine("Число num1 больше 25")
End Select
Здесь мы также генерируем случайное число и последовательно сравниваем его значения. Обратите внимание на строку Case 3 To 25 -
здесь мы задаем целый диапазон значений от 3 до 25. Также обратите внимание, что если будет найдено совпадение с одним из выражений Case,
то остальные выражения Case рассматриваться не будут. То есть следующий код отработает только для выражения Case 1, после чего
программа осуществит выход из Select Case, несмотря на то, что новое значение числа совпадает с значением в следующем выражении Case:
Dim num2 As Integer = 1
Select Case num2
Case 1
Console.WriteLine("Число num2 равно 1")
num2 += 1
Case 2
Console.WriteLine("Число num2 равно 2")
num2 += 1
Case 3 To 25
Console.WriteLine("Число num2 равно 3")
End Select
Ну и в конце говоря об условных конструкций нельзя не упомянуть и оператор GoTo. Этот оператор требует после себя указание метки, на которую осуществляется переход. Например:
Dim time As String = "day"
If time = "day" Then
GoTo M1
Else
GoTo M2
End If
M1: Console.WriteLine("Hello World")
M2: Console.WriteLine("Good Bye World")
Как показывает практика, начинающие часто злоупотребляют использованием этого оператора, что приводит к написанию некрасивого и непонятного кода. Поэтому рекомендуется использовать данный оператор как можно реже и по возможности обходиться без него.