3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【C#】タプル(Tuple)とは?複数の戻り値をまとめて返すスマートな方法

Posted at

【C#】タプル(Tuple)とは?複数の戻り値をまとめて返すスマートな方法

🧩 タプル(Tuple)とは?

**タプル(Tuple)**とは、複数の異なる値を1つのまとまりとして扱うことができるデータ構造です。
C# 7.0以降で正式に導入され、複数の戻り値を返す場面や、一時的なデータのグループ化にとても便利です。


🔰 基本構文と使い方

(string, int) person = ("Eigo", 38);

Console.WriteLine(person.Item1); // Eigo
Console.WriteLine(person.Item2); // 38
  • これは「名前が string、年齢が int」の2要素を持つタプル。
  • Item1, Item2 で要素にアクセスできます。

✅ 名前付きタプル(可読性UP)

(string Name, int Age) person = ("Eigo", 38);

Console.WriteLine(person.Name); // Eigo
Console.WriteLine(person.Age);  // 38
  • プロパティに名前をつけることでコードの可読性が格段に上がります
  • 名前付きタプルは C# 7.1 以降で推奨されるスタイルです。

🚀 メソッドの戻り値に使う(複数戻り値を返す)

(string Name, int Age) GetPerson()
{
    return ("Eigo", 38);
}

var (name, age) = GetPerson();
Console.WriteLine($"{name}, {age}"); // Eigo, 38
  • 複数の型の戻り値を一括で返すことができます。
  • デコンストラクション構文(var (a, b))で簡単に分解可能。

🎯 よくある使用シーン

シーン 理由・用途
複数の値を一時的にまとめたい DTOを定義するほどでもない場合に便利
メソッドの戻り値を2つ以上返したい タプルで返すことで呼び出しがスッキリ
テストコードで入力と結果をまとめたい responseactual を同時に確認できる

⚠️ 注意点と使い分け

項目 タプル(Tuple) クラス / レコード型
可読性 中程度(名前付きで改善可能) 高い(プロパティ名が明確)
拡張性 △ 値の追加がやや不便 ◎ 拡張しやすい
一時的な用途向け △ クラス定義がやや冗長
意味を持たせたい △ 名前次第 ◎ 型名・プロパティ名で明確化

❌ NGパターン:object/dynamic の利用

以下のような書き方は型安全性が失われるため非推奨です。

object GetData() => true ? "abc" : 123;
  • 型チェックが甘くなり、実行時エラーの元になります。
  • タプルを使うことで、型を明示しつつ複数値を返すことができます。

📝 まとめ

  • **タプルは軽量な「一時的なデータのまとまり」**として非常に便利
  • 複数の戻り値を返したい場面ではタプルでコードを簡潔に
  • 意味を強調したい or 拡張性が必要な場合はレコードやDTOで定義

🔗 関連タグ

#CSharp #Tuple #戻り値 #可読性 #メソッド設計


🙋‍♂️「戻り値の設計どうする?」と悩んだときに、この記事が少しでも参考になれば嬉しいです!
👍 役に立ったらストック・いいねお願いします!

3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?