2015-06-15 3 views
0

Могу ли я (и если да, то как) выполните следующие действия на языке .NET (более конкретно VB.NET):.NET использовать IIF, чтобы присвоить значение различных переменных

Dim a,b as Integer 
if(somecondition=1,a,b) = 12345 

Или любой вариант с IIF будет меня устраивает. В принципе, я всегда присваиваю то же значение, но никогда к той же переменной.

+0

Вы не можете использовать такую ​​конструкцию.Тем не менее, вы могли бы иметь один оператор строки: «Если somecondition = 1 Then a = 12345 Else b = 12345' – Blackwood

+0

У меня, очевидно, упрощен мой вопрос (пример), но он более сложный и включает в себя несколько условий; плюс мое значение не так статично, как в моем примере .. Поэтому я хочу, чтобы на самом деле избежать использования нескольких Ifs .. – jplanglais

+2

Если ваш случай более сложный, трудно понять, как вы надеетесь упростить его таким образом. Возможно, вы должны отредактировать свой пример, чтобы быть немного более сложным. – Blackwood

ответ

2

То, что вы просите сделать, было бы возможно на языке, который поддерживает типы указателей (например, 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») может быть повторно использовано даже в виде другого типа данных, потому что это будет другая переменная компилятору.

+0

Принято, спасибо за подробный ответ. – jplanglais

3

Нет, я не верю, что в VB есть способ сделать это. Условные операторы (такие как If(x, y, z)) предназначены для оценки выражения или другого на основе условия. Другими словами, это результат условный, а не его использование.

Просто используйте нормальный If заявление:

If somecondition Then 
    a = 12345 
Else 
    b = 12345 
End If 

Или, чтобы избежать повторения значения (например, если это более сложное выражение):

Dim value As Integer = 12345 
If somecondition Then 
    a = value 
Else 
    b = value 
End If 
+0

Посмотрите мои комментарии на исходное сообщение – jplanglais

+3

@jplanglais: Это не меняет того факта, что вы не можете этого сделать. Вы можете избежать повторения значения с использованием локальной переменной заранее, но об этом. –

0

Не в VB, но с момента назначения в C# возвращает присвоенное значение, вы можете сделать следующее в C# (поскольку вы упомянули «любой язык .NET»):

int unused = (someCondition ? a = 123 : b = 123); 
+0

Не совсем то же самое - ОП надеется на какой-то СУХОЙ узор здесь. Может быть, больше похоже на '* ((someCondition == 1)? & A: & b) = 12345'. – rskar

Смежные вопросы