VB2010 (.net 4.0) から Tuple 型というのがあるようです。
どうも、元々は F# で複数の値を戻すための実装のようですが、VBでも使用できる模様。
たとえば以下のように書けば複数の値を戻せるようです。
Function func() As Tuple(Of String, Integer, Double) Return Tuple.Create("aaa", 1, 2.0) End Function Sub Main() Dim a = func() Console.WriteLine("{0} {1} {2}", a.Item1, a.Item2, a.Item3) End Sub
メソッドから複数の値を戻すとき、戻り値用のクラスや内部クラス (Class内に書くClass) を別に作る必要がなく、引数参照渡し (Call by Reference) に頼らずに済むので便利そうです。
個人的には、引数参照渡しによる戻り値は、隠れグローバル変数になってしまったり、引数のうちどれが戻るのかが一目でわからないので好きでなかったんですね。
かといって複数の値を返すメソッドが出る都度、クラスを書いていくのもどうか…と思っていて。
Tuple はそれを解決できるので、今後積極的に使ってみようと思う所存です。
ただ、プロパティ名が Item1…とか無機的な名前で、その名前について個別に xml コメントをつけるとかそういうことができるわけではないようです。
なので、戻り値として受けた Tuple は直後に正規の変数に代入しかえてやるとかの配慮が必要。それを忘れると(Tuple を戻すメソッドと 、その Tuple を参照する場所が離れすぎると)、その Tuple の .Item1 が何の値なのかコード上で追いにくくなってしまうので、その点は注意でしょうか。
なお、本件の元ネタはここから拝借しました。