誰かがタプルとは何か、実世界のシナリオでそれを使用する方法を説明してください。これにより、コーディングエクスペリエンスがどのように充実するのかを知りたいですか?
この msdn article は例で非常によく説明しています。 "タプルはデータ構造です特定の数と要素のシーケンスがあります」。
タプルは一般に4つの方法で使用されます。
単一のデータセットを表すため。たとえば、タプルはデータベースレコードを表すことができ、そのコンポーネントはレコードの個々のフィールドを表すことができます。
データセットへの簡単なアクセスと操作を提供するため。
Outパラメーター(C#の場合)または
ByRef
パラメーター(Visual Basicの場合)を使用せずに、メソッドから複数の値を返す。単一のパラメーターを介して複数の値をメソッドに渡す。たとえば、
Thread.Start(Object)
メソッドには、起動時にスレッドが実行するメソッドに1つの値を指定できる単一のパラメーターがあります。メソッド引数としてTuple<T1, T2, T3>
オブジェクトを指定すると、スレッドの起動ルーチンに3つのデータ項目を指定できます。
タプルを使用すると、カスタムクラスを作成しなくても、異なるタイプの複数の値を単一のオブジェクトに結合できます。これは、たとえば3つの関連する値を返すメソッドを作成したいが、新しいクラスを作成したくない場合に役立ちます。
通常、クラスを作成する必要があります。これにより、各プロパティに便利な名前を付けることができます。タプルを広範囲に使用するコードは、プロパティがItem1
、Item2
、Item3
などと呼ばれるため、すぐに判読できなくなります。
タプルとクラスの違いは、タプルにプロパティ名がないことです。これはほとんど決して良いことではありません。抽象的な数学式のように、引数がかなり無意味な場合にのみタプルを使用します。 5,6,7次元以上の抽象計算では、座標にTupleを使用できます。
これは、タプル型について知っておくべき最も重要なことです。タプルはクラスであり、構造体ではありません。したがって、マネージヒープに割り当てられます。割り当てられる各クラスインスタンスは、ガベージコレクションの負担を増やします。
注:Item1、Item2などのプロパティにはセッターがありません。それらを割り当てることはできません。タプルは、メモリ内に作成されると不変です。
タプルクラスを使用すると、特定の用途向けに特定のクラスを定義しないことで、開発者は「迅速かつ怠zy」になります。
プロパティ名はItem1、Item2、Item3 ...です。これは、場合によっては、またはドキュメントがない場合には意味がない場合があります。
タプルクラスには、強く型付けされたジェネリックパラメーターがあります。それでもTupleクラスのユーザーは、ジェネリックパラメーターのタイプから推測できます。