メソッドの戻り値を配列にすることでメソッドから複数の値を返すことができます。 しかし、例えば意味の異なる値を配列でひとまとめにして返すようにすると、格納されている値の意味があいまいになり、また呼び出し側では戻り値を配列から展開する必要があります。
商と剰余を配列に格納して返すメソッド
using System;
class Sample {
// xとyの商と剰余を求めるメソッド
// 商は戻り値のインデックス0、剰余はインデックス1に格納する
static int[] DivRem(int x, int y)
{
var ret = new int[2];
ret[0] = x / y;
ret[1] = x % y;
return ret;
}
static void Main()
{
// 7÷3の商と剰余を求めたい
var ret = DivRem(7, 3);
// 戻り値から商と剰余に展開しなければならない
// また戻り値の配列に格納されている値の意味があいまいになる
var div = ret[0];
var rem = ret[1];
}
}
このような場合は、配列よりもoutパラメータ(VBではByRef引数)を使ったほうがより適切です。
outパラメータ・ByRef引数はメソッドの戻り値と併用することもできます。 実際、.NETで用意されている商と剰余を求めるMath.DivRemメソッドでは、商は戻り値として、剰余はoutパラメータで返されるようになっています。
Math.DivRemメソッドについては数学関数 §.積・商と剰余 (BigMul, DivRem)を参照してください。