カテゴリ: C# 更新日: 2026/02/07

C#の戻り値にタプルを使う方法!複数の値を返すテクニック

C#の戻り値にタプルを使う方法!複数の値を返すテクニック
C#の戻り値にタプルを使う方法!複数の値を返すテクニック

先生と生徒の会話形式で理解しよう

生徒

「C#でメソッドから複数の値を返すことってできますか?」

先生

「はい、C#ではタプルという機能を使えば、1つのメソッドで複数の値をまとめて返すことができますよ。」

生徒

「タプルって何ですか?初めて聞きました!」

先生

「それでは、タプルの意味や使い方を、初心者の方にもわかるように丁寧に説明していきましょう!」

1. タプルとは?初心者向けにわかりやすく解説

1. タプルとは?初心者向けにわかりやすく解説
1. タプルとは?初心者向けにわかりやすく解説

タプル(Tuple)とは、複数の値をひとつのまとまりとして扱うための箱のような構造です。例えば、「名前」と「年齢」をセットで返したいとき、今まではクラスを作ったりrefoutを使って面倒な書き方をしていましたが、C# 7.0以降ではタプルを使うことでとても簡単になります。

たとえば、以下のように書くと、2つの値を1つの戻り値として返すことができます。


(string, int) GetPerson()
{
    string name = "田中";
    int age = 30;
    return (name, age);
}

この例では、「文字列(名前)」と「整数(年齢)」の2つの値をまとめて返しています。

2. タプルを使ってメソッドから複数の値を返す方法

2. タプルを使ってメソッドから複数の値を返す方法
2. タプルを使ってメソッドから複数の値を返す方法

上の例を実際に呼び出して、タプルから値を取り出すにはどうすればよいのでしょうか?

以下のように書くことで、返ってきたタプルの中身を個別に取り出すことができます。


var person = GetPerson();
Console.WriteLine($"名前:{person.Item1}");
Console.WriteLine($"年齢:{person.Item2}");

名前:田中
年齢:30

Item1Item2という書き方でも取り出せますが、もっと読みやすくしたいときは名前付きタプルが便利です。

3. 名前付きタプルでコードをもっと読みやすくしよう

3. 名前付きタプルでコードをもっと読みやすくしよう
3. 名前付きタプルでコードをもっと読みやすくしよう

名前付きタプルを使えば、Item1Item2の代わりに、自分で付けた分かりやすい名前でアクセスできます。


(string name, int age) GetPerson()
{
    return ("田中", 30);
}

var person = GetPerson();
Console.WriteLine($"名前:{person.name}");
Console.WriteLine($"年齢:{person.age}");

名前:田中
年齢:30

このように、nameageという名前で取り出せるので、初心者でもとても読みやすくなります。

4. 戻り値にタプルを使うメリット

4. 戻り値にタプルを使うメリット
4. 戻り値にタプルを使うメリット

C#で戻り値にタプルを使うメリットはいくつかあります。

  • クラスや構造体を定義しなくても複数の値を返せる
  • outrefを使わなくても良いので、コードがシンプルになる
  • メソッドの結果をそのまま分かりやすく利用できる

特にプログラミング初心者にとって、タプルはとても使いやすく、覚えておくと便利な機能です。

5. より実践的なタプルの使い方

5. より実践的なタプルの使い方
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. タプルの中身を分解して使う(分解代入)

6. タプルの中身を分解して使う(分解代入)
6. タプルの中身を分解して使う(分解代入)

タプルは、変数に一度入れなくても、呼び出し時に分解して代入することもできます。


(string name, int age) = GetPerson();
Console.WriteLine($"名前:{name}");
Console.WriteLine($"年齢:{age}");

名前:田中
年齢:30

このように、一行でタプルの中身をそれぞれの変数に分けることができるのも、非常に便利なテクニックです。

まとめ

まとめ
まとめ

今回はC#のタプル(Tuple)を使って、メソッドから複数の戻り値を返す方法について詳しく学びました。従来は、複数の値を戻すにはrefoutを使う必要がありましたが、C# 7.0以降ではタプルを使うことでコードをより簡潔に書くことができます。
タプルは文字列・数値・ブール型など異なる型の値をまとめて返すことができる便利な構造であり、特に初心者が関数を活用する場面で強力な助けになります。

さらに、名前付きタプルを使うことで、Item1Item2といった抽象的な名前ではなく、nameageなど意味のある変数名でタプルの中身にアクセスできるようになります。これにより、コードの可読性が向上し、バグの予防にもつながります。

また、分解代入というテクニックを使えば、タプルを一時変数に格納せずに直接個々の変数へ展開できるため、コードがよりスッキリします。
それでは、今回の内容をふまえて、実践的なタプルの使い方の一例を確認しておきましょう。


using System;

class Program
{
    // 名前とスコアを返すメソッド
    static (string name, int score) GetStudentScore()
    {
        string studentName = "佐藤";
        int studentScore = 85;
        return (studentName, studentScore);
    }

    static void Main()
    {
        // 分解して受け取る
        (string name, int score) = GetStudentScore();

        Console.WriteLine($"学生名:{name}");
        Console.WriteLine($"点数 :{score}点");
    }
}

学生名:佐藤
点数 :85点

このように、タプルを使えば「関数の戻り値は1つしか返せない」という制限を超えて、複数の情報を自然な形で扱うことができます。C#の文法の中でも特に実用性が高く、学んでおいて損のないテクニックです。

タプルの活用は、小規模なプログラムだけでなく、業務アプリケーションなどでも応用可能です。例えば、APIのレスポンス処理や、計算結果の説明付き返却など、場面に応じて柔軟に使えるのが大きな強みです。

今後さらにステップアップしていくためには、「構造体との違い」や「レコード型との使い分け」なども学んでいくことになりますが、まずは今回のような基本的なタプルの使い方をしっかりマスターすることが大切です。

先生と生徒の振り返り会話

生徒

「タプルって名前は聞いたことあったけど、実際に使うとすごく便利なんですね!」

先生

「そうですね。タプルを使うことで、複数の値をわかりやすくまとめて返せるので、メソッド設計がよりシンプルになります。」

生徒

「名前付きでアクセスできるのもすごく読みやすくて、初心者でも安心ですね。」

先生

「その通りです。読みやすさはバグの少なさにもつながりますから、可読性はとても大切なポイントなんですよ。」

生徒

「分解代入も使えるってことは、コードがもっと短く書けそうですね。今度自分の練習プログラムでも試してみます!」

先生

「いいですね。今回学んだ内容を実際に書いて試すことで、より深く理解できますよ。どんどん使ってみてくださいね。」

この記事を読んだ人からの質問

この記事を読んだ人からの質問
この記事を読んだ人からの質問

プログラミング初心者からのよくある疑問/質問を解決します

C#でタプルとは何ですか?初心者でもわかるように教えてください

C#のタプルとは、複数の値を1つにまとめて返したり受け取ったりできる機能で、配列やクラスとは違い、簡単に使える点が特徴です。複数の型をまとめて扱えるので、メソッドの戻り値に便利です。
カテゴリの一覧へ
新着記事
New1
C#
C#のメモリ管理とガーベジコレクションの基礎を理解しよう
New2
C#
C#の参照型と値型の違いを初心者向けにやさしく解説!
New3
C#
C#のクエリ式とメソッド式の書き換え方を完全ガイド!LINQの2つの書き方をマスター
New4
C#
C#の戻り値にタプルを使う方法!複数の値を返すテクニック
人気記事
No.1
Java&Spring記事人気No1
C#
C#で文字列が数値か判定する方法を解説!char.IsDigitやTryParseの基本
No.2
Java&Spring記事人気No2
C#
C#のLINQでOrderByを使った並び替えを完全ガイド!初心者でもわかるソート方法
No.3
Java&Spring記事人気No3
C#
C#のrefとoutキーワードとは?引数の参照渡しを理解しよう
No.4
Java&Spring記事人気No4
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#の引数と戻り値の基本!値を受け渡し・返す仕組みを理解しよう
No.7
Java&Spring記事人気No7
C#
C#のラムダ式の書き方と構文を初心者向けに完全解説
No.8
Java&Spring記事人気No8
C#
C#のLINQでFirstとFirstOrDefaultの違いと使い方を完全解説!初心者向けガイド