2009-08-12 20 views
6

Có cách nào để đưa ra giá trị cho nhiều biến (số nguyên trong trường hợp này), thay vì tất cả cùng một lúc không?Nhiều Biến

Ví dụ: tôi có Dim aceVal, twoVal, threeVal, fourVal, fiveVal, sixVal, sevenVal, eightVal, nineVal, tenVal As Integer và, đang chờ chọn hộp danh sách, tôi muốn gán baVal bốnVal và sáuVal tất cả các giá trị -1.

Tôi làm cách nào để thực hiện việc này? Cảm ơn.

+1

+1 để xử lý sáu mươi biến khác nhau. Tôi cảm thấy hào phóng. –

+4

Tôi nhận ra rằng Jake đã qua đời ngay bây giờ, nhưng đối với những độc giả tương lai. Jake nên cân nhắc nghiêm túc xem liệu anh ta có thực sự cần 60 biến hay không, thay vào đó là một mảng hoặc một bộ sưu tập chứa 60 phần tử. – MarkJ

Trả lời

5

Tôi thật sự không có nghĩa là một thằng ngốc, nhưng là có bất cứ lý do tại sao bạn không thể chỉ làm:

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

tôi có khoảng sáu mươi biến khác nhau. đó chỉ là một ví dụ. –

+1

Ah. Bạn nên nói vậy. Nhưng tại sao bạn có sáu mươi biến khác nhau? –

+0

sáu mươi giá trị khác nhau, riêng biệt. vâng, đau ở mông. nghĩ rằng tôi có thể chỉ đi từng dòng trên cái này. –

4

Không có cách nào trong vb.net để gán chúng trên cùng một dòng như threeVal = fourVal = SixVal.

Nếu bạn cần tất cả các biến này thì một dòng tại một thời điểm là cách. Tôi sẽ đề nghị nếu -1 sẽ được sử dụng rất nhiều sau đó tạo ra một hằng số cho nó và gán var cho hằng số.

Tôi cũng sẽ xem xét sử dụng mảng hoặc bộ sưu tập để lưu trữ tất cả các giá trị của bạn nếu có thể và làm việc với chúng để thiết lập/truy xuất giá trị của chúng. Sau đó bạn sẽ không phải có 60 biến được phân bổ tất cả trong mã của bạn. Mảng và/hoặc bộ sưu tập sẽ sạch hơn một chút.

4

Bạn có thể sử dụng một mảng/từ điển như vậy:

 
Dictionary myValues = new Dictionary(); 

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

Sau đó, bạn có thể viết một hàm đơn giản:

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

Và cuối cùng khi hộp danh sách của bạn thay đổi bạn chỉ có thể gọi hàm để cập nhật các biến bạn muốn như vậy:

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

Hy vọng điều này sẽ hữu ích.

* Chỉnh sửa: Tôi biết trong C#, nhưng dễ dàng chuyển sang VB.

2

Bạn có thể kê khai và asign giá trị sử dụng constructor:

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

Tôi biết đây là một chủ đề cũ, tuy nhiên tôi vừa chạy vào một vấn đề tương tự bản thân mình - đây là cách tôi đã làm nó (Tôi chỉ đối phó với 4 giá trị

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 

này có thể dễ dàng thích nghi, bằng cách làm cho biến đầu tiên giá trị yêu cầu (mã này cũng có vẻ hơi điên một chút vì tôi phải cung cấp một mặc định mà chỉ có thể là đúng hay sai, nhưng rõ ràng với số nguyên hoặc cái gì đó có vẻ ý nghĩa hơn.)

0

bạn có thể đặt nó trong danh sách và sử dụng cho từng phương pháp đây là mã

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

Tôi nghĩ tính năng chuyển nhượng nhiều là vì vậy mát mẻ trong C# mà tôi đã viết một phương pháp mở rộng VB mở rộng (Assign) để làm điều tương tự. Các ngữ nghĩa khá dễ làm theo; bạn chỉ cần gọi Assign trên bất kỳ giá trị để gán nó vào nhiều biến số khác tức

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

vv ...

Dưới đây là các mã:

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

Nếu bạn muốn giữ nó trên một dòng sau đó bạn có thể làm điều đó như thế này

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

Và sử dụng tùy chọn suy luận, bạn có thể sử dụng 'Dim m1 =" false ", m2 =" false ", m3 =" false "' – jmoreno