То, что вы просите сделать, было бы возможно на языке, который поддерживает типы указателей (например, C/C++ или C# в небезопасном режиме) с разыменованием; VB.NET этого не делает. Лучшее, что вы получили, - это локальные переменные, ссылочные типы и (возможно) ByRef
.
Если это Class
, его описание является ссылочным. Structure
и Integer
- каждый тип значения.
Для большинства ссылочных типов вы можете просто установить локальную переменную равную той переменной, которая представляет интерес, а затем продолжить и установить ее свойства или вызывать ее методы уверенными в том, что затронутый экземпляр является желательным. Единственное исключение - это ссылка на неизменяемый тип, такой как String
.
Dim a, b As New System.Text.StringBuilder()
Dim sb As System.Text.StringBuilder = If(somecondition = 1, a, b)
sb.Append("OK!")
На самом деле, не обязательно нужна локальная переменная со ссылочными типами.
' Method 2
Call If(somecondition = 1, a, b).Append("OK!")
' Method 3
With If(somecondition = 1, a, b)
.Append("OK!")
End With
Для типов значений (и неизменяемых классов) вы скорее застреваете. В основном все, что можно сделать, это использовать локальную переменную в качестве прокси-сервера, как и предложил Джон Скит.
Узор я иногда использую себя:
Dim a, b As Integer
If True Then
Dim _v As Integer = 12345
If somecondition = 1 Then a = _v Else b = _v
End If
Обратите внимание на использование If True Then
- это так срок службы _v
заканчивается в End If
. «Так что» этого следует избегать: (1) иметь длинный список временных переменных; или (2) вероятность использования общих ошибок кодирования, связанных с повторным использованием временных переменных. Затем временное имя переменной (например, «_v») может быть повторно использовано даже в виде другого типа данных, потому что это будет другая переменная компилятору.
Вы не можете использовать такую конструкцию.Тем не менее, вы могли бы иметь один оператор строки: «Если somecondition = 1 Then a = 12345 Else b = 12345' – Blackwood
У меня, очевидно, упрощен мой вопрос (пример), но он более сложный и включает в себя несколько условий; плюс мое значение не так статично, как в моем примере .. Поэтому я хочу, чтобы на самом деле избежать использования нескольких Ifs .. – jplanglais
Если ваш случай более сложный, трудно понять, как вы надеетесь упростить его таким образом. Возможно, вы должны отредактировать свой пример, чтобы быть немного более сложным. – Blackwood