C#で関数を作っていると、複数のデータをreturnしたい場面があります。
複数のreturnというとコーディング上、大きく2つの意味合いがありますが、一つ目は簡単で文字通り条件によって複数のreturnのいづれかが実行されます。
private double function(double a, double b) { if (a == b) { return 1; } else { return 0; } }
このような場合は、コーディング規約等でretrunは1つにせよという風にされている場合もあるかもしれません。
その場合は、一度変数に入れてあげればよいです。
private double function(double a, double b) { double ans; if (a==b) { ans = 1; } else { ans = 0; } return ans; }
しかし、これらはいずれもreturnがいくつ書かれているかによらずfunctionの戻り値としては1つの変数です。
場合によっては↓のようなことをしたい時があると思いませんか?
ちなみに、pythonではこのような記法が可能でタプルとして戻ってきます。
private double function(double a, double b) { return a * 3,b * 4; } >> (6, 12) #pythonの例 a=2, b=3のとき
本編
厳密にいうと関数の戻り値は0(つまり1つ)にしているが、結果的には複数の値を戻すことが出来る方法です。戻したい値を格納する変数を配列で関数に渡してあげます。
private void Form1_Load(object sender, EventArgs e) { double a = 2; double b = 3; double[] ans = new double[2]; function(a, b, ans); MessageBox.Show(ans[0].ToString()+" , "+ans[1].ToString()); } private double function(double a, double b, double[] ans) { ans[0] = a * 3; ans[1] = b * 4; return 0; }
入力のaとbと出力の配列(ans[])を関数の引数に入れて、関数の中で配列の中身を書き換えてあげます。