2009-08-12 22 views
6

¿Hay alguna manera de dar un valor a múltiples variables (enteros en este caso), en lugar de todas a la vez?Varias variables

Por ejemplo, tengo Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer y, a la espera de la selección del cuadro de lista, me gustaría asignar a threeVal fourVal y sixVal todos los valores de -1.

¿Cómo puedo hacer esto? Gracias.

+1

+1 para tratar con sesenta variables diferentes. Me siento generoso. –

+4

Me doy cuenta de que Jake ya se fue hace mucho tiempo, pero para lectores futuros. Jake debería considerar seriamente si realmente necesita 60 variables, o en su lugar una matriz o una colección que contenga 60 elementos. – MarkJ

Respuesta

5

Realmente no quiero ser un idiota, pero ¿hay alguna razón por la cual no se puede simplemente hacer:

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

tengo alrededor de sesenta variables diferentes. eso es solo un ejemplo. –

+1

Ah. Deberías decir eso entonces. Pero ¿por qué tienes sesenta variables diferentes? –

+0

sesenta diferentes valores separados. sí, dolor en el culo. Creo que puedo ir línea por línea en este caso. –

4

No hay manera en vb.net para asignar a todos ellos en una sola línea como threeVal = fourVal = SixVal.

Si necesita todas estas variables, una línea a la vez es el camino. Yo sugeriría si -1 va a ser usado mucho, luego crearé una constante para él y asignaré las var a la constante.

También consideraría utilizar una matriz o colección para almacenar todos sus valores si es posible y trabajar con ellos para establecer/recuperar sus valores. Entonces no tendrá que tener 60 variables ensuciadas en su código. La matriz y/o colección sería un poco más limpia.

4

Se podría utilizar un conjunto de discos/diccionario de este modo:

 
Dictionary myValues = new Dictionary(); 

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

A continuación, podría escribir una función simple:

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

Y, finalmente, cuando cambia el cuadro de lista sólo podría llamar a la función de actualice las variables que desee así:

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

Espero que esto ayude.

* Editar: Sé que está en C#, pero es fácilmente portátil para VB.

2

Puede declarar y asign el valor con el constructor:

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

Sé que esto es un hilo de edad, sin embargo sólo he encontrado con un problema similar a mí mismo - aquí es cómo lo hice (soy sólo se ocupan de 4 valores

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 

esto puede ser fácilmente adaptado, al hacer la primera variable el valor requerido (este código también se ve un poco tonto porque tengo que proporcionar un valor predeterminado que sólo puede ser verdadera o falsa, pero obviamente con enteros o algo parece más significativo.)

0

se puede poner en la lista y utilizar para cada método Este es el código

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

Pensé que la función de asignación múltiple era así que cool in C# que escribí un VB método de extensión (Assign) para hacer lo mismo. La semántica es bastante fácil de seguir; que acaba de llamar Assign cualquier valor para asignarlo a otras varias variables es decir

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

etc ...

Aquí está el código:

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

Si desea mantenerlo en una línea entonces usted puede hacerlo así

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

Y usando la opción inferir, puede usar 'Dim m1 =" false ", m2 =" false ", m3 =" false "' – jmoreno

Cuestiones relacionadas