2009-08-12 13 views
6

C'è un modo per dare un valore a più variabili (in questo caso numeri interi), invece di tutto in una volta?Variabili multiple

Ad esempio, ho Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer e, in attesa di selezione casella di riepilogo, desidero assegnare treVal fourVal e sixVal a tutti i valori di -1.

Come posso fare questo? Grazie.

+1

+1 per gestire sessanta diverse variabili. Mi sento generoso. –

+4

Mi rendo conto che Jake è ormai lontano, ma per i futuri lettori. Jake dovrebbe seriamente considerare se ha davvero bisogno di 60 variabili, o invece una matrice o una raccolta contenente 60 elementi. – MarkJ

risposta

5

Io davvero non voglio essere un coglione, ma c'è alcuna ragione per cui non si può semplicemente fare:

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

ho circa sessanta diverse variabili. questo è solo un esempio. –

+1

Ah. Dovresti dirlo allora. Ma perché hai sessanta diverse variabili? –

+0

sessanta diversi valori separati. sì, dolore nel culo. penso che potrei andare solo riga per riga su questo. –

4

Non c'è modo in vb.net per assegnare loro tutto su una riga come threeVal = fourVal = SixVal.

Se sono necessarie tutte queste variabili, una riga alla volta è la via. Vorrei suggerire se -1 sarà usato molto, quindi creare una costante per esso e assegnare i var alla costante.

Vorrei anche considerare l'utilizzo di un array o di una raccolta per archiviare tutti i valori, se possibile, e lavorare con essi per l'impostazione/recupero dei loro valori. Quindi non sarà necessario avere 60 variabili inserite nel codice. Matrice e/o raccolta sarebbe un po 'più pulita.

4

Si potrebbe utilizzare una matrice/dizionario in questo modo:

 
Dictionary myValues = new Dictionary(); 

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

È quindi possibile scrivere una semplice funzione:

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

E, infine, quando cambia la casella di riepilogo si può solo chiamare la funzione di aggiorna le variabili che vuoi in questo modo:

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

Spero che questo aiuti.

* Modifica: so che è in C#, ma è facilmente trasportabile in VB.

2

È possibile dichiarare e assegnare dei il valore utilizzando il costruttore:

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

So che questo è un vecchio filo, però ho appena incontrato un problema simile me stesso - ecco come ho fatto (io sono solo trattare con 4 valori

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 

questo può essere facilmente adattato, rendendo la prima variabile al valore desiderato (questo codice è anche un po 'stupido perché devo fornire un default che può essere solo vero o falso, ma ovviamente con numeri interi o qualcosa sembra più significativo.)

0

si può mettere in lista e utilizzare per ogni metodo Ecco il codice

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

Ho pensato che la funzione di assegnazione multipla era quindi cool in C# che ho scritto un metodo di estensione VB (Assign) per fare la stessa cosa. La semantica è abbastanza facile da seguire; basta chiamare Assign su qualsiasi valore da assegnare a più variabili diverse cioè

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

ecc ...

Ecco il codice:

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

Se si desidera mantenere su un linea quindi puoi farlo in questo modo

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

E usando l'opzione infer., Puoi usare 'Dim m1 =" false ", m2 =" false ", m3 =" false "' – jmoreno