2009-08-12 13 views
6

Czy istnieje sposób na podanie wartości wielu zmiennych (w tym przypadku liczb całkowitych) zamiast wszystkich naraz?Wiele zmiennych

Na przykład, mam Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer i oczekujący wybór listbox, chciałbym przypisać trzy Val FourVal i Six Val wszystkie wartości -1.

Jak mogę to zrobić? Dzięki.

+1

+1 za obsługę 60 różnych zmiennych. Czuję się hojny. –

+4

Zdaję sobie sprawę, że Jake już dawno nie istnieje, ale dla przyszłych czytelników. Jake powinien poważnie zastanowić się, czy naprawdę potrzebuje 60 zmiennych, czy raczej tablicy lub kolekcji zawierającej 60 elementów. – MarkJ

Odpowiedz

5

ja naprawdę nie chcę być draniem, ale czy istnieje jakiś powód, dlaczego nie można po prostu zrobić:

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

Mam około sześćdziesięciu różnych zmiennych. to tylko przykład. –

+1

Ah. Powinieneś tak powiedzieć. Ale dlaczego masz sześćdziesiąt różnych zmiennych? –

+0

sześćdziesiąt różnych, oddzielnych wartości. Tak, ból w dupie. myślę, że mogę po prostu przejść po linii na tym. –

4

Nie ma sposobu, w VB.NET, aby przypisać je wszystkie w jednej linii jak threeVal = fourVal = SixVal.

Jeśli potrzebujesz wszystkich tych zmiennych, to jedna linia na raz jest drogą. Sugerowałbym, że jeśli -1 będzie używane dużo, to utwórz dla niego stałą i przypisz var do stałej.

Chciałbym również rozważyć użycie tablicy lub kolekcji do przechowywania wszystkich wartości, jeśli to możliwe i pracować z nimi w celu ustawienia/pobrania ich wartości. Wtedy nie będziesz musiał mieć 60 zmiennych zaśmieconych w całym kodzie. Array i/lub kolekcja byłyby trochę czystsze.

4

Można używać tablicy/słownik tak:

 
Dictionary myValues = new Dictionary(); 

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

Następnie można napisać prostą funkcję:

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

I wreszcie, gdy zmienia pole listy można po prostu wywołać funkcję do zaktualizuj zmienne, które chcesz:

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

Mam nadzieję, że to pomoże.

* Edycja: wiem, że jest w języku C#, ale jest łatwy do przeniesienia na VB.

2

Można zadeklarować i asign wartość za pomocą konstruktora:

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

Wiem, że to stary wątek, ale ja po prostu uruchomić w podobnej kwestii siebie - oto jak to zrobiłem (jestem tylko do czynienia z 4 wartości

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 

ten można łatwo dostosować, dokonując pierwszej zmiennej żądaną wartość (kod ten również wygląda nieco stuknięty bo muszę dostarczyć fabrycznymi, które można tylko prawdziwe lub fałszywe, ale oczywiście z liczbami całkowitymi lub czymś, co wydaje się bardziej znaczące.)

0

można umieścić go na liście i użyć dla każdej metody oto kod

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

Myślałem, że funkcja wielu zadań była , więc fajne w C#, w którym napisałem metodę rozszerzającą VB (Assign), aby wykonać to samo. Semantyka jest łatwa do naśladowania; wystarczy zadzwonić Assign na dowolną wartość, aby przypisać go do wielu innych zmiennych tj

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

etc ...

Oto kod:

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

Jeśli chcesz zachować go na jednym następnie możesz to zrobić w ten sposób:

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

Używając opcji opcji, możesz użyć 'Dim m1 =" false ", m2 =" false ", m3 =" false "' – jmoreno

Powiązane problemy