2009-08-12 5 views
6

Есть ли способ дать значение нескольким переменным (целые числа в этом случае), а не сразу?Несколько переменных

Например, у меня есть Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer, и в ожидании выбора списка я хотел бы назначить threeVal fourVal и sixVal все значения -1.

Как я могу это сделать? Благодарю.

+1

+1 для работы с шестью разными переменными. Я чувствую себя великодушным. –

+4

Я понимаю, что Джейк уже давно ушел, но для будущих читателей. Джейк должен серьезно подумать, действительно ли ему нужны 60 переменных, или вместо этого массив или коллекция, содержащая 60 элементов. – MarkJ

ответ

5

Я действительно не хочу быть рывком, но есть ли причина, почему вы не можете просто сделать:

threeVal = -1 
fourVal = -1 
sixVal = -1 
+0

У меня около шестидесяти различных переменных. это всего лишь пример. – 2009-08-12 05:15:15

+1

Ах. Вы должны это сказать. Но почему у вас есть шестьдесят разных переменных? –

+0

шестьдесят разных, отдельные значения. да, боль в заднице. думаю, я могу просто пойти по строкам на этом. – 2009-08-12 05:19:23

4

Там нет никакого способа в vb.net, чтобы назначить их все на одной линии например threeVal = fourVal = SixVal.

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

Я также хотел бы использовать массив или коллекцию для хранения всех ваших значений, если это возможно, и работать с ними для установки/извлечения их значений. Тогда вам не придется иметь 60 переменных, замусоренных в вашем коде. Массив и/или коллекция будут немного чище.

4

Вы можете использовать массив/словарь, как так:

 
Dictionary myValues = new Dictionary(); 

myValues.Add("FirstVal", 1); 
myValues.Add("SecondVal", -1); 
myValues.Add("ThirdVal", 1); 

Вы могли бы написать простую функцию:

 
public updateMyValues(string[] myKeys, int myValue) 
{ 
    foreach (string s in myKeys) 
     { 
      myValues[s] = myValue; 
     } 
} 

И, наконец, когда изменяется список ваш ящик можно просто вызвать функцию в обновите переменные, которые вы так хотите:

 
upDateMyValues({"FirstVal", "ThirdVal"}, -1); 

Надеюсь, что это поможет.

* Редактировать: Я знаю, что это на C#, но он легко переносится на VB.

2

Вы можете объявить и Asign значения с помощью конструктора:

Dim str1, str2, str3, str4 As New String("asdf") 
Dim int1, int2, int3, int4 As New Integer 
0

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

Private Sub SetFalse(ByRef first As Boolean, Optional ByRef second As Boolean = False, Optional ByRef third As Boolean = False, Optional ByRef fourth As Boolean = False) 
    first = False 
    second = False 
    third = False 
    fourth = False 
End Sub 

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

0

вы можете поместить его в список и использовать для каждого метода здесь код

Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer 
Dim var As New List(Of Integer) From {threeVal, fiveVal, sixVal} 'you can add more variable here 
For Each n As Integer In var 
    n = -1 
Next 
0

Я думал, что функция многократного назначения так cool in C# что я написал VB метод расширения (Assign), чтобы сделать то же самое. Семантика довольно проста для подражания; вы просто вызываете Assign любого значения, чтобы назначить его несколько других переменного т.е.

Call True.Assign(b1, b2, b3) 
Call 4.1.Assign(d1, d2, d3) 

и т.д ...

Вот код:

Imports System.Runtime.CompilerServices 


Namespace Utility 
    Public Module MultiAssignExtensionMethod 
     ' Multiply assign the same value to 1 (required) or more variables 
     <Extension()> _ 
     Public Function Assign(Of T)(this As T, ByRef first As T, Optional ByRef second As T = Nothing, Optional ByRef third As T = Nothing, 
            Optional ByRef forth As T = Nothing, Optional ByRef fifth As T = Nothing, Optional ByRef sixth As T = Nothing, 
            Optional ByRef seventh As T = Nothing, Optional ByRef eighth As T = Nothing, Optional ByRef nineth As T = Nothing, 
            Optional ByRef tenth As T = Nothing) As T 
          ' I would LIKE to do this as a ParamArray, but it doesn't allow references for basic types....grrr 
      first = this 
      second = this 
      third = this 
      forth = this 
      fifth = this 
      sixth = this 
      seventh = this 
      eighth = this 
      nineth = this 
      tenth = this 

      Return this  ' For use as assignment and evaluation as Function parameter 
     End Function 
    End Module 
End Namespace 
4

Если вы хотите, чтобы держать его на одном line, вы можете сделать это следующим образом:

Dim m1 As String = "false", m2 As String = "false", m3 As String = "false" 
'etc.. 
+0

И используя опцию infer, вы можете использовать 'Dim m1 =" false ", m2 =" false ", m3 =" false "' – jmoreno

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