メソッドの戻り値を配列にすることでメソッドから複数の値を返すことができます。 しかし、例えば意味の異なる値を配列でひとまとめにして返すようにすると、格納されている値の意味があいまいになり、また呼び出し側では戻り値を配列から展開する必要があります。
商と剰余を配列に格納して返すメソッド
Imports System
Class Sample
' xとyの商と剰余を求めるメソッド
' 商は戻り値のインデックス0、剰余はインデックス1に格納する
Shared Function DivRem(ByVal x As Integer, ByVal y As Integer) As Integer()
Dim ret(2) As Integer
ret(0) = x \ y
ret(1) = x Mod y
Return ret
End Function
Shared Sub Main()
' 7÷3の商と剰余を同時に求めたい
Dim ret() As Integer = DivRem(7, 3)
' 戻り値から商と剰余に展開しなければならない
' また戻り値の配列に格納されている値の意味があいまいになる
Dim div As Integer = ret(0)
Dim remn As Integer = ret(1)
End Sub
End Class
このような場合は、配列よりもoutパラメータ(VBではByRef引数)を使ったほうがより適切です。
outパラメータ・ByRef引数はメソッドの戻り値と併用することもできます。 実際、.NETで用意されている商と剰余を求めるMath.DivRemメソッドでは、商は戻り値として、剰余はoutパラメータで返されるようになっています。
Math.DivRemメソッドについては数学関数 §.積・商と剰余 (BigMul, DivRem)を参照してください。