サーチ…


タプルの作成

タプルは、汎用タイプTuple<T1> - Tuple<T1,T2,T3,T4,T5,T6,T7,T8>を使用して作成されます。それぞれの型は、1〜8個の要素を含むタプルを表します。要素は異なるタイプのものにすることができます。

// tuple with 4 elements
var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());

タプルは、静的なTuple.Createメソッドを使用して作成することもできます。この場合、要素の型はC#コンパイラによって推論されます。

// tuple with 4 elements
var tuple = Tuple.Create("foo", 123, true, new MyClass());
7.0

C#7.0以降、タプルはValueTupleを使用して簡単に作成できます。

var tuple = ("foo", 123, true, new MyClass());

簡単な分解のために要素に名前を付けることができます。

(int number, bool flag, MyClass instance) tuple = (123, true, new MyClass());

タプル要素へのアクセス

タプル要素にアクセスするには、 Item1 - Item8プロパティを使用します。タプルサイズ以下のインデックス番号を持つプロパティのみが使用可能になります(つまり、 Tuple<T1,T2> Item3プロパティにアクセスできません)。

var tuple = new Tuple<string, int, bool, MyClass>("foo", 123, true, new MyClass());
var item1 = tuple.Item1; // "foo"
var item2 = tuple.Item2; // 123
var item3 = tuple.Item3; // true
var item4 = tuple.Item4; // new My Class()

タプルの比較とソート

タプルはその要素に基づいて比較できます。

例として、 Tuple型の要素を持つ列挙型は、指定された要素で定義された比較演算子に基づいてソートできます。

List<Tuple<int, string>> list = new List<Tuple<int, string>>();
list.Add(new Tuple<int, string>(2, "foo"));
list.Add(new Tuple<int, string>(1, "bar"));
list.Add(new Tuple<int, string>(3, "qux"));

list.Sort((a, b) => a.Item2.CompareTo(b.Item2)); //sort based on the string element

foreach (var element in list) {
    Console.WriteLine(element);
}

// Output:
// (1, bar)
// (2, foo)
// (3, qux)

ソートの使い方を逆にするには:

list.Sort((a, b) => b.Item2.CompareTo(a.Item2));

メソッドから複数の値を返す

タプルは、パラメータを使用せずにメソッドから複数の値を返すために使用できます。次の例では、 AddMultiplyを使用して2つの値(sum、product)が返されます。

void Write()
{
    var result = AddMultiply(25, 28);
    Console.WriteLine(result.Item1);
    Console.WriteLine(result.Item2);
}

Tuple<int, int> AddMultiply(int a, int b)
{
    return new Tuple<int, int>(a + b, a * b);
}

出力:

53
700

C#7.0では、値タプルを使用するメソッドから複数の値を返す代わりの方法が提供されていますValueTuple構造体に関するさらに詳しい情報



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow