Один рядок, якщо у VB .NET


78

Чи можна зробити один рядок if у VB .NET? Якщо так, то як?


Будьте обережні з оперором IIf - він не завжди замикається, і оцінюються як справжні, так і помилкові вирази.
Пол Олександр

1
Я насправді вважаю, що IIF ніколи не замикається
Брайан Дж.,

Яка перевага - чи навіть мета - IFF перед If?
Лу

@LeoKing Зворотна сумісність з VB6. Одиночна IF я була введена у VB.NET, тоді як подвійна II IF існувала раніше. І я не вірю, що жодна частина VB6 підтримує оцінку короткого замикання.
Брайан Дж.

Відповіді:


121

Використовуйте IF ().

Це короткозамкнений потрійний оператор.

Dim Result = IF(expression,<true return>,<false return>)

ДИВИТИСЯ ТАКОЖ:


5
Зверніть увагу, що може існувати неявне лиття типу. Наприклад: If(x.HasValue, x.Value, Nothing) поверне 0, якщо x не містить значення. Одним із способів виправлення може бути примусове значення до Nullable таким чином:If(x.HasValue, CType( x.Value, Nullable( of Integer) ), Nothing)
LosManos

2
@LosManos FYI, Причиною отриманого результату є така: Якщо xмає тип Integer?, значить x.Valueмає тип Integer, НЕ Integer?. Отже, компілятор правильно перетворив Nothing у Integer(щоб відповідати іншому результату), в результаті чого 0. Просто пояснення поведінки компілятора; те, що ви зробили, - це прекрасне рішення для того, що ви хотіли. Альтернативним рішенням було б передати Ніщо на бажаний тип, наприклад DirectCast(Nothing, Integer?).
ToolmakerSteve

Ви хочете сказати, що If перевіряє тип, що повертається ExpressionIfTrue, коли він повертає ExpressionIfFalse?
Ама,

25

Насправді це досить просто ..

If CONDITION Then ..INSERT CODE HERE..

Так. Незважаючи на те, що я ненавиджу це, розміщення If...Then...Else...висловлювань в один рядок можливо. Однак пам’ятайте, коли ви поєднуєте це з розміщенням декількох операторів в одному рядку за допомогою двокрапки. Оператор If <condition> Then <action1> : <action2>виконуватиме action2 лише у поєднанні з action 1! Action2 не є окремим твердженням! Тому для наочності я б радив завжди використовувати оператори блоків і взагалі уникати двокрапки.
Барт Хофланд,

17

Не знаю, чому люди цього ще не опублікували ...

Однорядковий

Синтаксис:

If (condition) Then (do this)

Приклад:

If flag = true Then i = 1

Кілька інших

Синтаксис:

If (condition) Then : (do this)
ElseIf (condition2) Then : (do this)
Else : (do this)
End If

АБО

If (condition) Then : (do this) : ElseIf (condition2) Then : (do this) : Else : (do this) : End If

Багато операцій

Синтаксис:

If (condition) Then : (do this) : (and this) : End If

Сподіваюся, це комусь допоможе.


16

Ризикуючи спричинити защемлення програмістів purests та c #, ви можете використовувати декілька операторів, інакше в однострочному операторі if у VB. У цьому прикладі y закінчується 3, а не 7.

i = 1
If i = 1 Then x = 3 : y = 3 Else x = 7 : y = 7

2
@BrianWebster Ніцца. Я це ненавиджу. :)
Барт Хофланд



4

Один рядок "Якщо заява"

Простіше, ніж ви думаєте, зауважив, що ніхто ще не поклав те, що я маю, тому кину свої 2 центи.

У моєму тестуванні вам не потрібно continuation? semi-colon, ви можете обійтися без, також ви можете зробити це без End If.

<C#> = Condition.

<R#> = True Return.

<E> = Else Return.

Одномісний стан

If <C1> Then <R1> Else <E>

Кілька умов

If <C1> Then <R1> Else If <C2> Then <R2> Else <E>

Нескінченний? Умови

If <C1> Then <R1> Else If <C2> Then <R2> If <C3> Then <R3> If <C4> Then <R4> Else...
' Just keep adding "If <C> Then <R> Else" to get more

-Не дуже впевнений, як відформатувати це, щоб зробити його більш читабельним, тому, якщо хтось може запропонувати редагування, будь ласка, зробіть-




0

Його просто використовувати у коді VB.NET

Базовий синтаксис IIF (вираз як логічний, істинна частина як об'єкт, помилкова частина як об'єкт) як об'єкт

  1. Використання IIF те саме, що і Ternary
  2. Затемнити myVariable як рядок = ""
  3. myVariable = IIf (умова, істина, помилка)

0
If (condition, condition_is_true, condition_is_false)

Це виглядатиме так у довшій версії:

If (condition_is_true) Then 

Else (condition_is_false)

End If

0

якщо умова, то command1: else command2 ...


Гей, Мостафа, ласкаво просимо до stackoverflow! Ваша відповідь досить коротка, без будь-яких пояснень і не додає жодної додаткової інформації до інших відповідей, як-от відповідь Пухнастого Себберта.
Stefan M
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.