タプルを返すメソッドの実装方法
C# 7.0 からタプルを戻り値とするメソッドを記述できるようになりました。
これにより、あるメソッドから複数の値を返したいときに、一時的な構造体やクラスなどの型を定義する必要がなくなります。
急いでいる人は次のビデオをどうぞ。
System.ValueTuple パッケージの参照が必要です。
Visual Studio のプロジェクトを使って入るなら、Tools メニューの Nuget パッケージマネージャから参照を設定します。
それから、あまりやってるひとはいないかもしれませんが、コマンドラインからパッケージを取得するには、次で取得できます。一応。
> nuget install System.ValueTuple
次の例で、GetEmployee メソッドは従業員の情報を返すメソッドです。戻り値でタプルを返しています。
using System;
class TestApp
{
public static void Main(string[] args)
{
var emp = GetEmployee();
Console.WriteLine($"{emp.Item1} {emp.Item2} {emp.Item3}");
}
public static (string, int, string) GetEmployee()
{
return ("Ichiro Suzuki", 35, "Manager");
}
}
呼び出し側では、一つ目の要素を Item1、二つ目の要素を Item2、・・・として参照しています。これがデフォルトの名前になります。
しかしこれでは、メソッドの戻り値のタプルにセットする値の順番を変えただけで、呼び出し側で不具合が発生することになってしまいます。 このため、より堅牢なコードにするためにはもっと意味のある名前でデータにアクセスさせるべきです。
次のように戻り値で名前を割り当てることで、呼び出し側で名前で値を参照することができるようになります。
using System;
class TestApp
{
public static void Main(string[] args)
{
var emp = GetEmployee();
Console.WriteLine($"{emp.name} {emp.age} {emp.title}");
}
public static (string name, int age, string title) GetEmployee()
{
return ("Ichiro Suzuki", 35, "Manager");
}
}
こうすれば、 上記 name と title を返す順番を変えても、呼び出し側では変更はありません。