VB.Net Tutorial/Collections/Array Parameters
Pass array
<source lang="vbnet">Imports System Imports Microsoft.VisualBasic Module Test
Dim i As Integer Public Sub AddOne(ByVal InputArray() As Integer) For i = 0 To 3 InputArray(i) = InputArray(i) + 1 Next End Sub Public Sub AddTwo(ByVal InputArray() As Integer) Dim tempArray() As Integer tempArray = InputArray.Clone For i = 0 To 3 tempArray(i) = tempArray(i) + 2 Next End Sub Sub Main() Dim intArray() As Integer = {6, 8, 7, 6} For i = 0 To 3 Console.WriteLine("{0}", intArray(i)) Next AddOne(intArray) For i = 0 To 3 Console.WriteLine("{0}", intArray(i)) Next AddTwo(intArray) For i = 0 To 3 Console.WriteLine("{0}", intArray(i)) Next End Sub
End Module</source>
6 8 7 6 7 9 8 7 7 9 8 7
Passing arrays and individual array elements to procedures
<source lang="vbnet">Module Tester
Sub Main() Dim array1 As Integer() = New Integer() {1, 2, 3, 4, 5} Dim i As Integer " display original elements of array1 For i = 0 To array1.GetUpperBound(0) Console.WriteLine(array1(i)) Next ModifyArray(array1) " array is passed by reference Console.WriteLine("The values of the modified array are:") " display modified elements of array1 For i = 0 To array1.GetUpperBound(0) Console.WriteLine(array1(i)) Next " array element passed by value ModifyElementByVal(array1(3)) Console.WriteLine("array1(3) after " & _ "ModifyElementByVal: " & array1(3)) " array element passed by reference ModifyElementByRef(array1(3)) Console.WriteLine("array1(3) after " & _ "ModifyElementByRef: " & array1(3))
End Sub " Main " procedure modifies array it receives (note ByVal) Sub ModifyArray(ByVal arrayParameter As Integer()) Dim j As Integer For j = 0 To arrayParameter.GetUpperBound(0) arrayParameter(j) *= 2 Next End Sub " ModifyArray " procedure modifies integer passed to it " original is not be modified (note ByVal) Sub ModifyElementByVal(ByVal element As Integer) Console.WriteLine("Value received in " & _ "ModifyElementByVal: " & element) element *= 2 Console.WriteLine("Value calculated in " & _ "ModifyElementByVal: " & element) End Sub " ModifyElementByVal " procedure modifies integer passed to it " original is be modified (note ByRef) Sub ModifyElementByRef(ByRef element As Integer) Console.WriteLine("Value received in " & _ "ModifyElementByRef: " & element ) element *= 2 Console.WriteLine("Value calculated in " & _ "ModifyElementByRef: " & element) End Sub
End Module</source>
1 2 3 4 5 The values of the modified array are: 2 4 6 8 10 Value received in ModifyElementByVal: 8 Value calculated in ModifyElementByVal: 16 array1(3) after ModifyElementByVal: 8 Value received in ModifyElementByRef: 8 Value calculated in ModifyElementByRef: 16 array1(3) after ModifyElementByRef: 16
Testing the effects of passing array references using ByVal and ByRef
<source lang="vbnet">Module Tester
Sub Main() Dim i As Integer Dim firstArray As Integer() Dim firstArrayCopy As Integer() firstArray = New Integer() {1, 2, 3} firstArrayCopy = firstArray For i = 0 To firstArray.GetUpperBound(0) Console.Write(firstArray(i) & " ") Next FirstDouble(firstArray) For i = 0 To firstArray.GetUpperBound(0) Console.Write(firstArray(i) & " ") Next If firstArray Is firstArrayCopy Then Console.WriteLine("The references are equal.") Else Console.WriteLine("The references are not equal.") End If Dim secondArray As Integer() Dim secondArrayCopy As Integer() secondArray = New Integer() {1, 2, 3} secondArrayCopy = secondArray For i = 0 To secondArray.GetUpperBound(0) Console.Write(secondArray(i) & " ") Next SecondDouble(secondArray) For i = 0 To secondArray.GetUpperBound(0) Console.Write(secondArray(i) & " ") Next If secondArray Is secondArrayCopy Then Console.WriteLine("The references are equal.") Else Console.WriteLine("The references are not equal.") End If End Sub " Main Sub FirstDouble(ByVal array As Integer()) Dim i As Integer For i = 0 To array.GetUpperBound(0) array(i) *= 2 Next array = New Integer() {11, 12, 13} End Sub Sub SecondDouble(ByRef array As Integer()) Dim i As Integer For i = 0 To array.GetUpperBound(0) array(i) *= 2 Next array = New Integer() {11, 12, 13} End Sub
End Module</source>
1 2 3 2 4 6 The references are equal. 1 2 3 11 12 13 The references are not equal.