C#
 Computer >> コンピューター >  >> プログラミング >> C#

C# 4.0のタプル(Tuple)とは?基本の使い方をわかりやすく解説

C# 4.0のタプル(Tuple)とは

タプルとは、異なるデータ型の要素を順序付けてひとつにまとめて保持できるデータ構造です。C# 4.0で導入されたこの機能により、メソッドから複数の値を返す際に、各要素の型を個別に指定する必要がなくなり、Tuple<T>クラスのインスタンスを手軽に生成・返却できるようになりました。

従来は複数の値を返すために専用のクラスや構造体を定義する必要がありましたが、タプルを使えばその手間が省け、コードをシンプルに保つことができます。

タプルの宣言方法

まず、2つの要素(int型とstring型)を持つタプルを宣言する例を見てみましょう。

Tuple<int, string> person = new Tuple<int, string>(32, "Steve");

タプルの各要素には、Item1Item2といったプロパティを使ってアクセスします。

最初の要素(整数)へのアクセス

if (tuple.Item1 == 99) {
    Console.WriteLine(tuple.Item1);
}

2番目の要素(文字列)へのアクセス

if (tuple.Item2 == "Steve") {
    Console.WriteLine(tuple.Item2);
}

サンプルプログラム

以下は、int型とstring型の要素を持つタプルを作成し、それぞれの値を条件判定して表示する完全なサンプルコードです。

using System;
using System.Threading;

namespace Demo {
    class Program {

        static void Main(string[] args) {

            Tuple<int, string> tuple = new Tuple<int, string>(50, "Tom");

            if (tuple.Item1 == 50) {
                Console.WriteLine(tuple.Item1);
            }

            if (tuple.Item2 == "Jack") {
                Console.WriteLine(tuple.Item2);
            }
        }
    }
}

実行結果

50

結果の解説

この例では、tuple.Item1が50であるため「50」が出力されます。一方、tuple.Item2は"Tom"ですが、条件式では"Jack"と比較しているため一致せず、何も表示されません。

補足:タプルを使ううえでのポイント

  • タプルは最大7つの要素(Item1〜Item7)を持ち、さらにRestプロパティを通じて8番目以降の要素をネストして保持できます。
  • Tuple.Create(50, "Tom")のように静的メソッドCreateを使うと、型引数を明示せずに簡潔にタプルを生成できます。
  • タプルの要素は読み取り専用(イミュータブル)であるため、作成後に値を変更することはできません。
  • C# 7.0以降では、値型で軽量なValueTupleと名前付き要素を使ったより便利な記法も利用可能です。
  1. C#のユーザー定義例外とは?カスタム例外の作成方法を実例で解説

    ユーザー定義例外(カスタム例外)とは他のプログラミング言語と同様に、C#でも開発者が独自の例外を簡単に作成できます。このように自分で定義した例外をユーザー定義例外(カスタム例外)と呼びます。ユーザー定義の例外クラスは、標準ライブラリが提供するSystem.Exceptionクラスを継承して作成するのが基本です。組み込みの例外だけでは表現しきれない、アプリケーション固有のエラー状態を明確に扱いたい場合に、ユーザー定義例外は非常に有効です。サンプルコード:TempIsZeroExceptionの作成以下の例では、組み込みの例外ではなく、温度がゼロの場合にスローされるカスタム例外「TempIsZer

  2. C#の名前空間(namespace)とは?定義方法と基本的な使い方を解説

    名前空間とは名前空間(namespace)とは、ある一連の名前を別の一連の名前から分離して管理するための仕組みです。大規模なプロジェクトでは、複数の開発者が同じ名前のクラスやメソッドを作成することがあり、名前の衝突(コンフリクト)が発生する可能性があります。名前空間を使うことで、こうした衝突を防ぎ、コードを論理的に整理できます。また、.NET Framework が提供する System なども名前空間の一つであり、標準ライブラリの機能はすべて名前空間によって分類・管理されています。名前空間の定義方法名前空間の定義は、namespace キーワードで始まり、その後に名前空間名を続けて記述します