C#の戻り値にタプルを使う方法!複数の値を返すテクニック
生徒
「C#でメソッドから複数の値を返すことってできますか?」
先生
「はい、C#ではタプルという機能を使えば、1つのメソッドで複数の値をまとめて返すことができますよ。」
生徒
「タプルって何ですか?初めて聞きました!」
先生
「それでは、タプルの意味や使い方を、初心者の方にもわかるように丁寧に説明していきましょう!」
1. タプルとは?初心者向けにわかりやすく解説
タプル(Tuple)とは、複数の値をひとつのまとまりとして扱うための箱のような構造です。例えば、「名前」と「年齢」をセットで返したいとき、今まではクラスを作ったりrefやoutを使って面倒な書き方をしていましたが、C# 7.0以降ではタプルを使うことでとても簡単になります。
たとえば、以下のように書くと、2つの値を1つの戻り値として返すことができます。
(string, int) GetPerson()
{
string name = "田中";
int age = 30;
return (name, age);
}
この例では、「文字列(名前)」と「整数(年齢)」の2つの値をまとめて返しています。
2. タプルを使ってメソッドから複数の値を返す方法
上の例を実際に呼び出して、タプルから値を取り出すにはどうすればよいのでしょうか?
以下のように書くことで、返ってきたタプルの中身を個別に取り出すことができます。
var person = GetPerson();
Console.WriteLine($"名前:{person.Item1}");
Console.WriteLine($"年齢:{person.Item2}");
名前:田中
年齢:30
Item1やItem2という書き方でも取り出せますが、もっと読みやすくしたいときは名前付きタプルが便利です。
3. 名前付きタプルでコードをもっと読みやすくしよう
名前付きタプルを使えば、Item1やItem2の代わりに、自分で付けた分かりやすい名前でアクセスできます。
(string name, int age) GetPerson()
{
return ("田中", 30);
}
var person = GetPerson();
Console.WriteLine($"名前:{person.name}");
Console.WriteLine($"年齢:{person.age}");
名前:田中
年齢:30
このように、nameやageという名前で取り出せるので、初心者でもとても読みやすくなります。
4. 戻り値にタプルを使うメリット
C#で戻り値にタプルを使うメリットはいくつかあります。
- クラスや構造体を定義しなくても複数の値を返せる
outやrefを使わなくても良いので、コードがシンプルになる- メソッドの結果をそのまま分かりやすく利用できる
特にプログラミング初心者にとって、タプルはとても使いやすく、覚えておくと便利な機能です。
5. より実践的なタプルの使い方
次は、少し応用的な例として、計算結果とその説明を一緒に返すメソッドを考えてみましょう。
(string message, int result) AddNumbers(int a, int b)
{
int sum = a + b;
return ($"{a} + {b} の結果は:", sum);
}
var data = AddNumbers(5, 8);
Console.WriteLine(data.message);
Console.WriteLine(data.result);
5 + 8 の結果は:
13
このように、説明文と数値の2つを一緒に返すことができるのはタプルならではの強みです。
6. タプルの中身を分解して使う(分解代入)
タプルは、変数に一度入れなくても、呼び出し時に分解して代入することもできます。
(string name, int age) = GetPerson();
Console.WriteLine($"名前:{name}");
Console.WriteLine($"年齢:{age}");
名前:田中
年齢:30
このように、一行でタプルの中身をそれぞれの変数に分けることができるのも、非常に便利なテクニックです。